Указатели - разобрать строку кода - C (СИ) (77018)
Формулировка задачи:
Не могу никак понять тему про указатели. Даются примеры, а я их не понимаю.
И вот исче:
Рассматриваю пример - указатель и массивы:
Если где неправильные комменты дайте знать, пжл. Всем огромное спс за объяснения и удачи
int t; // объявление переменной t t=*x; // в t находится ЗНАЧЕНИЕ x *x=*y; // вот этого я не могу понять. Как мне кажется (но может, конечно, неправильно казаться) присвоение указателей работает справо налево) в чем смысл этого выражения понять не могу. *y=t; // в *y значение t
int *uk // указатель на целое uk=&a[0] //указатель на АДРЕС первого элемента массива. Но непонятно почему uk без звездочки? uk+i // пример опять без звездочки, но по идее должен указывать на i элемент массива uk+i //написано, что это выражение является адресом a[i] - вот это ваще непонятно *(uk=1) // это уже совсем непонятно что делается
Решение задачи: «Указатели - разобрать строку кода»
textual
Листинг программы
int t; // объявление переменной t t=*x; // в t находится ЗНАЧЕНИЕ x *x=*y; // вот этого я не могу понять. Как мне кажется (но может, конечно, неправильно казаться) присвоение указателей работает справо налево) в чем смысл этого выражения понять не могу. *y=t; // в *y значение t
Объяснение кода листинга программы
В данном коде выполняются следующие действия:
- Объявляется переменная
tтипаint. tприсваивается значение*x, то есть адрес переменнойxприводится к значению, на которое она указывает.- Значение
*xприсваивается переменной*y. - Значение
*yприсваивается переменнойt. В общем виде список действий можно представить так: - Объявление переменной
t. - Присваивание
*xпеременнойt. - Присваивание
*yзначения*x. - Присваивание
*yпеременнойt. Однако, важно отметить, что непосредственное присваивание указателя (без использования оператора*) не изменяет значение указателя, а создает новый указатель, указывающий на тот же объект, что и исходный указатель. Это значит, что после выполнения данного кода,xиyбудут указывать на одно и то же место в памяти.