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

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

extern int ap( char[][] );

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

5
задан D.C. 3 March 2010 в 04:25
поделиться

5 ответов

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

вот так:

extern int ap( char[][10] );
5
ответ дан 18 December 2019 в 09:06
поделиться

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

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

Дополнительную информацию см. здесь

7
ответ дан 18 December 2019 в 09:06
поделиться

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 в любом из вышеупомянутых объявлений, не изменяя их.

4
ответ дан 18 December 2019 в 09:06
поделиться

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

1
ответ дан 18 December 2019 в 09:06
поделиться

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

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

extern int ap( char[][10] );
1
ответ дан 18 December 2019 в 09:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: