Покажчики та адреси

Покажчик – це змінна, яка містить адресу іншої змінної, оскільки покажчик має значення адреси об’єкту, то це створює можливість непрямого доступу до об’єкту через його адресу. Нехай маємо деяке int x, і px – яке назвемо показником, тоді унарний оператор & видає адресу об’єкту, таким чином рх=&х, то це буде значити, що рх є показником, який вказує на х. & — застосовують тільки до об’єктів розташованих в пам’яті, тобто до змінних і до елементів масивів. Його операнд не може бути ні виразом, ні константою, ні регістровою змінною.

Унарна операція *а розглядає свій операнд, як адресу кінцевої мети і звертається за цією адресою, щоб взяти вміст. Приклад:

Int x,y

px=&x; /* еквівалентно у=х */

y=*px;

Приклад:

int x=1, y=2, z[4]; /* z[4] – масив з 4 елементів */

int *ip /* ip – покажчик на int */

ip=&x /* ip – вказує на х */

у = &ip /* тепер у=1 */

ip=0 /* тепер х=0 */

ір=&z[0] /* ір – вказує на z[0] */

Показники можуть використовуватися у виразах: у=*рх+1. Посилання на покажчики можуть з’являтися і в лівій частині операції присвоювання *рх=0, рх+=1, еквівалентно (рх)++ .

Адресна арифметика

Це арифметика над покажчиками. Основним правилом адресної арифметики Сі, є те, що яким би не був тип об’єкту на який вказує покажчик операція р++ збільшує покажчик р так, що він вказує на наступний елемент набору таких об’єктів, а операція р+=і збільшує р так, що він вказує на елемент, який є і-тим елементом відносно даного. Відрізняють такі аспекти арифметики покажчиків:

1. В деяких випадках покажчики можна порівнювати, наприклад якщо р i q є елементами одного і того ж масиву, то до них можна застосувати відношення <; >; = тобто в межах одного масиву можно порівнювати покажчики елементів, якщо елементи з різних масивів то їх порівнювати не можна.

2. Якщо наприклад покажчик р, вказує на елемент масиву а, а покажчик q вказує на елемент масиву b, то порівнювати їх неможливо.

Покажчик і ціле число можно додавати і віднімати, тобто виконувати такі дії:

p+n p-покажчик n – ціле число.

При чому так може бути утворена адреса об’єкта, який займає n- те місце після об’єкта на який вказує покажчик р.

При цьому компілятор сам маштабує значення n у відповідності з розміром об’єктів на які вказує покажчик р, наприклад для типу даних char =1, для int =2, для float = 4.

(p-n) – р та n покажчики.

Віднімання покажчиків p i n, які вказують на елемент 1-го масивів допускається і тоді оця різниця вказує на кількість елементів, які знаходяться між р та n.

Інща арифметика над покажчиками є недопустимою. Забороняється додавати, множити, зсувати два покажчика.

Оставьте комментарий к статье