Взаємозв'язок між масивами та покажчиками у програмуванні на Сі (з прикладами)

У цьому підручнику ви дізнаєтесь про взаємозв'язок між масивами та покажчиками в програмуванні на C. Ви також навчитесь отримувати доступ до елементів масиву за допомогою покажчиків.

Перш ніж дізнатись про взаємозв'язок між масивами та покажчиками, обов’язково перевірте ці дві теми:

  • C Масиви
  • C Покажчики

Взаємозв'язок між масивами та покажчиками

Масив - це блок послідовних даних. Давайте напишемо програму для друку адрес елементів масиву.

 #include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; ) 

Вихідні дані

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Адреса масиву x: 1450734448 

Між двома послідовними елементами масиву x існує різниця у 4 байти. Це тому, що розмір int- 4 байти (на нашому компіляторі).

Зверніть увагу, що адреса & x (0) та x однакова. Це тому, що ім’я змінної x вказує на перший елемент масиву.

З наведеного вище прикладу ясно, що &x(0)еквівалент x. І, x(0)еквівалентно *x.

Так само,

  • &x(1)еквівалентно x+1і x(1)еквівалентно *(x+1).
  • &x(2)еквівалентно x+2і x(2)еквівалентно *(x+2).
  • В основному, &x(i)еквівалентно x+iі x(i)еквівалентно *(x+i).

Приклад 1: Покажчики та масиви

 #include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; ) 

Коли ви запускаєте програму, результат буде:

 Введіть 6 цифр: 2 3 4 4 12 4 Сума = 29 

Тут ми оголосили масив x з 6 елементів. Для доступу до елементів масиву ми використовували покажчики.

У більшості контекстів імена масивів зменшуються до покажчиків. Простими словами, імена масивів перетворюються на покажчики. Саме тому ви можете використовувати покажчики для доступу до елементів масивів. Однак слід пам’ятати, що покажчики та масиви - це не одне і те ж .

Є кілька випадків, коли імена масивів не перетворюються на покажчики. Щоб дізнатись більше, відвідайте сторінку: Коли назва масиву не перетворюється на покажчик?

Приклад 2: Масиви та покажчики

 #include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; )

Коли ви запускаєте програму, результат буде:

 * ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2

У цьому прикладі &x(2)адреса третього елемента призначається покажчику ptr. Отже, 3відображався, коли ми друкували *ptr.

І друк *(ptr+1)дає нам четвертий елемент. Так само друк *(ptr-1)дає нам другий елемент.

Цікаві статті...