Вказівники та масиви на C ++

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

У C ++ покажчики - це змінні, які містять адреси інших змінних. Вказівник не тільки може зберігати адресу однієї змінної, але також може зберігати адресу комірок масиву.

Розглянемо цей приклад:

 int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;

Тут ptr є змінною покажчика, а arr - intмасивом. Код ptr = arr;зберігає адресу першого елемента масиву у змінній ptr.

Зверніть увагу, що ми використовували arrзамість &arr(0). Це тому, що обидва однакові. Отже, код нижче такий самий, як і код вище.

 int *ptr; int arr(5); ptr = &arr(0);

Адреси для інших елементів масиву задаються &arr(1), &arr(2), &arr(3), і &arr(4).

Вкажіть на кожний елемент масиву

Припустимо, нам потрібно вказати на четвертий елемент масиву, використовуючи той самий вказівник ptr.

Тут, якщо ptr вказує на перший елемент у наведеному вище прикладі, тоді ptr + 3буде вказувати на четвертий елемент. Наприклад,

 int *ptr; int arr(5); ptr = arr; ptr + 1 is equivalent to &arr(1); ptr + 2 is equivalent to &arr(2); ptr + 3 is equivalent to &arr(3); ptr + 4 is equivalent to &arr(4);

Так само ми можемо отримати доступ до елементів за допомогою єдиного вказівника. Наприклад,

 // use dereference operator *ptr == arr(0); *(ptr + 1) is equivalent to arr(1); *(ptr + 2) is equivalent to arr(2); *(ptr + 3) is equivalent to arr(3); *(ptr + 4) is equivalent to arr(4);

Припустимо, якщо ми ptr = &arr(2);тоді ініціалізували

 ptr - 2 is equivalent to &arr(0); ptr - 1 is equivalent to &arr(1); ptr + 1 is equivalent to &arr(3); ptr + 2 is equivalent to &arr(4);
Робота вказівників на C ++ з масивами

Примітка: Адреса між ptr та ptr + 1 відрізняється на 4 байти. Це тому, що ptr - це вказівник на intдані. І, розмір int становить 4 байти в 64-бітовій операційній системі.

Подібним чином, якщо вказівник ptr вказує на charдані типу, тоді адреса між ptr і ptr + 1 дорівнює 1 байту. Це тому, що розмір символу становить 1 байт.

Приклад 1: Вказівники та масиви на C ++

 // C++ Program to display address of each element of an array #include using namespace std; int main() ( float arr(3); // declare pointer variable float *ptr; cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements for (int i = 0; i < 3; ++i) ( cout << "&arr(" << i << ") = " << &arr(i) << endl; ) // ptr = &arr(0) ptr = arr; cout<<"Displaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation for (int i = 0; i < 3; ++i) ( cout << "ptr + " << i << " = "<< ptr + i << endl; ) return 0; )

Вихідні дані

 Відображення адреси за допомогою масивів: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Відображення адреси за допомогою покажчиків: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

У наведеній вище програмі ми спочатку просто надрукували адреси елементів масиву, не використовуючи змінну вказівника ptr.

Потім ми використовували вказівник ptr для вказівки на адресу a (0), ptr + 1на адресу a (1) тощо.

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

Однак слід пам’ятати, що покажчики та масиви - це не одне і те ж.

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

Приклад 2: Ім'я масиву, що використовується як вказівник

 // C++ Program to insert and display data entered by using pointer notation. #include using namespace std; int main() ( float arr(5); // Insert data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i > *(arr + i) ; ) // Display data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) ( // display value of arr(i) cout << *(arr + i) << endl ; ) return 0; )

Вихідні дані

 Введіть 5 цифр: 2,5 3,5 4,5 5 2 Відображення даних: 2,5 3,5 4,5 5 2

Ось,

  1. Спочатку ми використовували нотацію покажчика для зберігання чисел, введених користувачем, у масив arr.

     cin>> *(arr + i) ;

    Цей код еквівалентний коду нижче:

     cin>> arr(i);

    Зверніть увагу, що ми не оголосили окрему змінну покажчика, а скоріше використовуємо ім'я масиву arr для позначення покажчика.

    Як ми вже знаємо, ім'я масиву arr вказує на перший елемент масиву. Отже, ми можемо думати про arr як про вказівник.

  2. Подібним чином ми потім використовували forцикл для відображення значень arr, використовуючи позначення покажчика.

     cout << *(arr + i) << endl ;

    Цей код еквівалентний

     cout << arr(i) << endl ;

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