Обработку массивов удобно организовывать с помощью специальных функций. Если в функцию передается массив, то на самом деле внутрь функции попадает только адрес массива. Фактически в функцию передаются: 1) адрес массива, 2) размер массива. Исключение составляют функции обработки строк, в которые передаются только адреса.
Обычно параметры функций в языке Си передаются как копии. Если внутри функции произойдет изменение значения параметра, то это никак не отразится на его первоначальном (оригинальном) значении. С массивами дело обстоит иначе. Если в функцию передается адрес массива (адрес нулевого элемента), то все операции, выполняемые в функции над массивом, производятся над оригиналом; поэтому исходный массив может быть случайно поврежден.
Рассмотрим пример программы, в которой функция modify увеличивает на 1 значение каждого элемента массива data.
#include <std | io | .h> | |
void modify(i { int i; | nt | * a, | int size) |
for (i=0; | i< | size, | • i++) |
*(a+i) | =* | (a+i) | + 1; |
/* a[i] } | a[i]+l;V |
main () г | |||||||
int data[] int i; | = {-12, | 14, | -io, | 16, | 22} | , | |
printf("n | Исходный | массив: | ") ; | ||||
for (i=0; | i<5; i++) | ||||||
printf( | "n data[ | %d] | =%d"/ | if | data | [i] ) ; | |
modify(dat | a, 5) ; | ||||||
printf ("n | Модифицированный | массив: | ") ; | ||||
for(i=0; i | <5; i++) | ||||||
} | printf( | "n data[ | %d] = | =%d", | if | data | [i] ) ; |