Арифметика указателей
В о-первых, указателю нужен тип для того, чтобы корректно работала операция разыменования (получения содержимого по адресу). Если указатель хранит адрес переменной, необходимо знать, сколько байт нужно взять, начиная от этого адреса, чтобы получить всю переменную. Во-вторых, указатели поддерживают арифметические операции. Для их выполнения необходимо знать размер. операция +N сдвигает указатель вперёд на N*sizeof(тип) байт. Например, если указатель int *p; хранит адрес CC02, то после p += 10; он будет хранить адрес СС02 + sizeof(int)*10 = CC02 + 28 = CC2A (Все операции выполняются в шестнадцатиричном формате). Пусть мы создали указатель на начало массива. После этого мы можем "двигаться" по этому массиву, получая доступ до отдельных элементов. ?
Заметьте, каким образом мы получили адрес первого элемента массива ?
Массив, по сути, сам является указателем, поэтому не нужно использовать оператор &. Можно переписать по-другому
Получить адрес первого элемента и относительно него двигаться по массиву. ?
Если же указатели равны, то они указывают на одну и ту же область памяти.
|