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

Покажчик – це змінна, яка містить адресу іншої змінної, оскільки покажчик має значення адреси об’єкту, то це створює можливість непрямого доступу до об’єкту через його адресу. Нехай маємо деяке 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.

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

Добавить комментарий

Your email address will not be published.

Default thumbnail
Previous Story

Поняття довірчого інтервалу, розподіл генеральної сукупності

Default thumbnail
Next Story

Властивості перетворення Лапласа

Latest from Програмування