Особенность передачи массивов в функции в языке Си в том, что передается не сам массив, а адрес массива, который хранится в локальном указателе на него.
Это можно сделать по-разному, но результат будет одинаковый:
void some_function(int array[]);
void some_function(int *array);
При этом обязательно нужно указать тип элемента массива.
Размер массива в функцию автоматически не передается, поэтому если размер массива заранее (на этапе компиляции) не оговорен, то нужно передать параметр, который содержит количество элементов в массиве, например number_of_elements:
void some_function(int array[], int number_of_elements);
Следующая программа передает массивы в функцию show_array, которая использует цикл for для вывода значений массивов:
#include <stdio.h>
void show_array (int array [], int number_of_elements)
{
for (int
i = 0; i < number_of_elements; i++) {
printf("%d\t",
array[i]);
}
printf("\n");
}
int main()
{
int little_numbers[5] = {1, 2, 3, 4, 5};
int big_numbers[3] = {1000, 2000, 3000};
show_array(little_numbers, 5);
show_array(big_numbers, 3);
}
Массив просто передается в функцию по имени (а его имя — это адрес первого элемента), а также указывает параметр, который сообщает функции количество элементов, содержащихся в массиве:
show_array(little_numbers, 5);
Возможно ли поменять значения элементов из функции?
Ответ положительный — да, это возможно, причем ничего дополнительно для этого указывать не нужно, так как в функцию передается адрес массива, а не сами значения, то и доступ происходит к тем же самым элементам, а не к их копиям.
Следующая программа использует функцию get_values, чтобы присвоить три значения массиву numbers:
#include <stdio.h>
void read_array(int array[], int number_of_elements)
{
for(int i = 0; i < number_of_elements; i++)
{
printf("Введите значение №%d: ", i);
scanf("%d", &array[i]);
}
}
int main()
{
int numbers[3] = {0, 0, 0};
read_array
(numbers, 3); //массив будет изменен!
printf("
Значения массива\n");
for (int i = 0; i < 3; i++) {
printf("
numbers [%d] \n", i);
}
return 0;
}
Как видите, программа передает массив в функцию по имени, а функция присваивает массиву элементы.
Таким образом, функция может изменить элементы массива, если ей это нужно.