Объявление функции C - PullRequest
       13

Объявление функции C

5 голосов
/ 03 марта 2010

мы можем объявить функцию в заголовочном файле следующим образом?

extern int ap( char[][] );

мы можем использовать char [] [] в функции?

Ответы [ 5 ]

7 голосов
/ 03 марта 2010

Нет, вам нужно указать последние N-1 измерения для массива.

extern int ap( char[][DIMENSION] );

Для получения дополнительной информации смотрите здесь

5 голосов
/ 03 марта 2010

Для двумерного массива вы должны указать размер последнего измерения, иначе компилятор не знает, как его использовать. (Впрочем, опускать имя хорошо.)

как это:

extern int ap( char[][10] );
4 голосов
/ 03 марта 2010

char[][] не является допустимым типом массива, поскольку у вас не может быть массивов неполного типа, а char[] является неполным. Я знаю, что это сбивает с толку, потому что у вас действительно есть два типа массивов, так что вот еще один пример с той же проблемой: char a[3][]. Массив a имеет длину 3 и тип элемента char[], но char[], опять же, неполон, и это неверно .

Когда у вас есть «многомерный массив», у вас действительно есть массив массивов. Например, typedef int U[3][5]; делает U массивом длины из 3 массивов длиной 5 дюймов и эквивалентен typedef int H[5]; typedef H U[3];.

Причина, по которой вы можете опустить самое левое измерение с параметрами функции, заключается в том, что только с параметрами функции , типы массивов вида T[N] преобразуются в T* и N можно опустить, давая T[] T*. Это относится только к «самому верхнему» или «крайнему» уровню.

Итак, все эти объявления функций идентичны:

int f1(int a[3][5]);
int f2(int a[][5]);
int f3(int (*a)[5]);
typedef int T[5];
int f4(T a[3]);
int f5(T a[]);
int f6(T* a);

Конечно, вы можете удалить имя параметра a в любом из приведенных выше объявлений, не изменяя их.

1 голос
/ 03 марта 2010

Нет, это не разрешено - он пытается объявить параметр как указатель на неполный тип массива.

Тип массива должен быть дополнен размером, например:

extern int ap( char[][10] );
1 голос
/ 03 марта 2010

Тем не менее, вполне допустимо опускать имена параметров в объявлениях функций. Однако когда вы определяете функцию, вы должны дать массиву имя, а затем вы можете ссылаться на него по этому имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...