Вы не можете передать сам массив функции вообще , а также не можете его вернуть.В частности, несмотря на появление своего объявления, ваша функция display()
не получает массив в качестве параметра.Это объявление на 100% эквивалентно этому:
void display(int *b, int size);
, а вот этому:
void display(int b[], int size);
Выражения типа массива автоматически преобразуются в указатели практически в любом контексте, в котором они могут появляться, так что вызов этой функции:
display(num,5);
эквивалентен
display(&num[0],5);
Тем не менее, существует потенциальная разница для вызова в этой области: выражение &num
равно не эквивалентно &num[0]
.Они ссылаются на один и тот же адрес, но два выражения имеют разные типы.Передача первого будет аналогом передачи массива по ссылке, но это выражение не имеет правильного типа для первого аргумента вашей функции display()
.Функция, которая хочет получить & num, должна быть объявлена по-другому:
void display2(int (*b)[5]);
или
void display3(int n, int (*b)[n]);
Для последнего требуется C99 или C2011 с поддержкой VLA (что требуется в C99, нонеобязательно в C2011).