Программирование на C и C++

Онлайн справочник программиста на C и C++

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

При передаче одномерных массивов в функции следует вызывать функцию с именем массива без индекса. В результате этого передается адрес первого элемента массива. В С невозможно передать весь массив как аргумент. Вместо этого автоматически передается указатель. Следующий пример передает адрес i в func1();

int main(void)
{
int i(10);
func1(i);
...
}

Если функция получает одномерный массив, то можно объявить формальный параметр как указатель, как массив с фиксированной длиной или как безразмерный массив. Например, для передачи i в функцию func1() можно объявить func1() одним из следующих способов:

void fun1 (int *a) /* указатель */
{
...
}

или

void fun1(int a[10]) /* массив с фиксированной длиной */
{
...
}

или

void fun1(int a []) /* безразмерный массив */
{
...
}

Все три способа объявления сообщают компилятору, что предполагается получение указателя на целое, В первом объявлении используется указатель. Во втором - стандартный способ объявления массива. В третьем - модифицированная версия объявления массива, указывающая на то, что предполагается получение массива типа int некоторой длины. Не имеет значения длина передаваемого массива, поскольку С не выполняет проверку выхода за границы массива. Фактически

void fund1(int а[32])
{
...
}

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