Масив у С++ ніколи не передається за значенням, а лише як вказівник на його нульовий елемент.
Тобто, нам доступна адреса, за якою ми можемо звертатися за значеннями.
Це дозволяє функції працювати відразу ж із масивом, а не з його копією. Але, якщо передається адреса, то в середині функції невідомо скільки в масиві елементів. Тому потрібен ще один параметр - кількість елементів у масиві.
Перший параметр це масив (точніше адреса початку масиву), другий параметр кількість елементів у масиві. Такі прототипи функції будуть по суті рівноцінними:
|
Наприклад,
#include <iostream> // Підключаємо бібліотеку для роботи з вводом/виводом
using namespace std; // Дозволяємо використовувати імена з std без префікса
// Оголошення функції print, яка друкує масив чисел
// numbers - вказівник на початок масиву
// n - кількість елементів у масиві
void print(int* numbers, int n);
int main() {
// Створюємо масив з 5 цілих чисел
int myArray[] = {0, 1, 2, 3, 4};
// Викликаємо функцію print для друку масиву
print(myArray, 5);
return 0; // Повертаємо 0, що означає успішне завершення програми
}
// Реалізація функції print
void print(int* numbers, int n) {
// Цикл для проходження по всіх елементах масиву
for (int i = 0; i < n; i++) {
// Друкуємо поточний елемент масиву та пробіл
cout << numbers[i] << " ";
}
}
Однак, всередині функції, ми звертаємося до елементів масиву за індексом, не використовуємо розіменування, яке необхідно, щоб отримати значення за адресою.
Це можливо, оскільки оператор [] перегружений для вказівників і дозволяє доступ до елементів масиву. Коли ми пишемо numbers[i], це еквівалентно *(numbers + i), де numbers — це адреса початку масиву, а i — індекс. Таким чином, numbers[i] означає "доступ до елемента за адресою numbers + i".