Menu
Coddy logo textTech

Массивы и функции

Часть раздела Основы путешествия по C++ на Coddy — урок 62 из 74.

Массивы нельзя передавать в функции напрямую как целые массивы. При попытке передать массив в функцию он «распадается» в указатель на свой первый элемент.

Например:

int numbers[5] = {1, 2, 3, 4, 5};
void processArray(int arr[]) {
	int size = std::size(arr);
}

std::size(arr) не даст вам фактический размер массива. arr здесь на самом деле является указателем, а не массивом. Указатели будут изучаться в следующем курсе.

Вот почему при передаче массивов в функции нам обычно нужно передавать размер в качестве отдельного параметра:

void processArray(int arr[], int size) {
    // Теперь мы можем безопасно работать с массивом, используя параметр size
}

Вот как вызвать функцию:

int numbers[5] = {1, 2, 3, 4, 5};
processArray(numbers, 5);

Также нельзя возвращать массив из функции:

int[] processArray(int arr[]) {
	return arr;
}

Это недопустимо. Вместо этого вам следует использовать синтаксис *:

int* processArray(int arr[]) {
	return arr;
}
int* newArr = processArray(arr);

Синтаксис со звездочкой (*) относится к указателям, которые будут обсуждаться в следующем курсе.

Шпаргалка

Массивы нельзя передавать в функции напрямую — они «распадаются» (decay) в указатели на их первый элемент.

При передаче массивов в функции необходимо передавать размер в качестве отдельного параметра:

void processArray(int arr[], int size) {
    // Работа с массивом с использованием параметра size
}

int numbers[5] = {1, 2, 3, 4, 5};
processArray(numbers, 5);

Массивы нельзя возвращать напрямую из функций. Вместо этого используйте синтаксис указателей:

int* processArray(int arr[]) {
    return arr;
}
int* newArr = processArray(arr);

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы