Периодически слышу мнения о чрезмерной сложности указателей для изучения. Однако ничего сложного в них не вижу: те же арифметические операции адресами, и одна единственная специфичная для них и довольно очевидная операция - разыменование. Можно какой-нибудь пример на C, демонстрирующий сложное использование указателей?
Примечание:
строка 2[ptr] =777 - ptr[-1]; смутила
Может быть не 2[ptr] а ptr[2] ? Или это фича такая?
Вкратце, анализ:
ptr+=2; // ptr теперь указывает на элемент ar[2], равный 3
ptr[2] = 777 - ptr[-1]; // ar[4] = 777 - ar[2-1] = 775
ptr[ptr[1]-3] = 99; // ar[1] = 99
(*(*ztr)) = *ptr + 23 - ptr[2]; // ar[2] = ar[2] + 23 - ar[4] = 3 + 23 - 775 = -749
Итого, если все выше правильно, выйдет что-то в роде
1 99 -749 4 775 6
P.S> ух, так наверное не пишут =)
Примечание:
@@А!! Ну и, конечно, связь между указателем и массивом. Эта связи настолько тесная, что многие их не различают. А различие, между тем, есть и оно существенное вы его знаете и понимаете??@@
Хотелось бы по-подробнее. Различие пожалуй очевидно, поскольку массив это все таки структура данных, а указатель на массив это указатель на его первый элемент. Соответственно разница в sizeof. Или вы имели ввиду что-то другое?
@Вызов функции по адресу с какими-то аргументами: непонятно, функция какого типа будет вызвана во время исполнения и как то, что вы запихали в стек будет истолковано этой функцией. @ Как это? Указатель на функцию? Вроде бы они строго определяются, и даже контролируются передаваемые параметры (впрочем контроль можно обойти).
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.