Информатика и технология программирования

       

Адресная арифметикаУказатель как адрес памяти


Рассмотренное понятие указателя не является полным. Более широкое толкование смысла указателя возникает в Си при введении особой операции указатель+целое , которая называется операцией АДРЕСНОЙ АРИФМЕТИКИ и интерпретируется следующим образом:



-любой указатель потенциально ссылается на неограниченную в обе стороны область памяти, заполненную переменными указуемого типа;



-переменные в области нумеруются от текущей указуемой переменной, которая получает относительный номер 0. Переменные в направлении возрастания адресов памяти нумеруются положительными значениями 1,2,3..., убывания - отрицательными --1,-2..;



-результатом операции " указатель + i" является адрес i-й переменной (значение указателя на i-ю переменную) в этой области относительно текущего положения указателя.

Таким образом, указатель ссылается на неограниченный массив с относительной нумерацией элементов массива от указуемой переменной. С учетом сказанного, ряд выражений, использующих операцию адресной арифметики, имеют свой особый смысл:


*p // Значение указуемой переменной;


p + i // Указатель на i-ю переменную после указуемой;


p -i // Указатель на i-ю переменную перед указуемой;


*(p+i) // Значение i-й переменной после указуемой;


p[i] // Значение i-й переменной после указуемой;


p++ // Установить указатель не переменную, следующую


// за указуемой;


p-- // Установить указатель на переменную,


// предшествующую указуемой;


p+=i // Переместить указатель на i переменных вперед


// относительно указуемой;


p-=i // Переместить указатель на i переменных назад


// относительно указуемой;




*p++ // Получить значение указуемой переменной и


// установить указатель на следующую;


*(--p) // Переместить указатель к переменной,


// предшествующей указуемой, и получить ее


// значение.

В операциях адресной арифметики транслятором автоматически учитывается размер указуемых переменных, то есть " +i" понимается не как смещение на i байтов, слов и пр., а как смещение на i указуемых переменных. Другая важная особенность: при перемещении указателя нумерация переменных в памяти остается относительной и всегда производится от текущей указуемой переменной.



Содержание раздела