Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Передача массива функции

Массив может быть передан целиком из одной функции в другую, хотя в языках Си и Си++ процедура передачи массива довольно сильно отличается от передачи переменных других типов. При передаче пе- ременной, не являющейся массивом, Си копирует данные, помещая их в область памяти, отведенную для принимающей переменной. Таким образом, имеются два набора данных, и если вызванная функция изме- нит значение переданной ей переменной, содержимое исходной переменной затронуто не будет.

При передаче массива происходит передача только лишь его адреса. Си не делает копии данных, а как бы дает исходному массиву (занимаемой им области памяти) другое имя. В Листинге10.3 продемонстрирова- но, как передавать массив в качестве аргумента. Обратите внимание, что для вызова аргумента использу- ется только имя массива без индекса:

convert(temps)

Листинг 10.3. Передача массива.

/*arr_pass.c*/

#define COUNT 31 main()

{

int temps[COUNT]; int index;

float celsius;

/*загрузка значений в массив*/

for (index = 0; index < COUNT; index++)

{

printf("Введите значение температуры #%d: ", index);

scanf("%d", &temp[index]);

}

/*передача массива функции convert()*/ convert(temps);

}

/*функция преобразования значений*/ convert(heat)

int heat[];

{

int index; float celsius;

for (index = 0; index < COUNT; index++)

{

celsius = (5.0 / 9.0) * (temps[index] - 32); printf("%d\t\t%6.2f\n",

heat[index], celsius);

}

}

Передача массивов в Си стандарта

K&R

Так отмечается дополнительная информация, в основном касающаяся особенностей языка Си++, которую при первом чтении можно пропус- тить.Исходный K&R-стандарт Си не позволяет передавать массив, исполь- зуя только его имя, как это сделано в примере. В этом случае для переда- чи массива необходимо использовать указатель на переменную, с кото- рым вы познакомитесь в главе 11. Однако компиляторы ANSI-Си и Си++ позволяют передавать массив с использованием синтаксиса, показанного в этой главе.

Замечания по Си++

Запомните, что Си++ позволяет определять массив непосредственно в

Так как в действительности был передан адрес массива, нам нет необходимости указывать количество элементов в формальном аргументе. Поэтому в записи используются только пустые квадратные скобки, указывающие на то, что имеется в виду именно массив:

convert(heat); int heat[];

Передача параметра посредством передачи адреса вместо копирования данных экономит память, но этот способ может давать побочные эффекты. Изменение

Рис. 10.6. Изменение значения массива функцией

массива в вызываемой функции приводит к изменению значений переданного ей массива, то есть если функция convert() присвоит новые значения массиву heat, эти же значения будут присвоены и массиву temps. Рис.10.6 демонстрирует программу, в которой функция convert() добавляет к значению каждого элемента массива heat единицу. Массив heat имеет тот же адрес в памяти, что и массив temps, поэтому значение каждого элемента массива temps также увеличится на единицу.