¿podemos declarar una función en un archivo de encabezado de la siguiente manera?declaración de función C
extern int ap(char[][]);
podemos usar char [] [] en la función?
¿podemos declarar una función en un archivo de encabezado de la siguiente manera?declaración de función C
extern int ap(char[][]);
podemos usar char [] [] en la función?
Para una matriz bidimensional, debe proporcionar un tamaño para la última dimensión, de lo contrario, el compilador no sabe cómo usarlo. (Que está bien para omitir el nombre embargo.)
así:
extern int ap(char[][10]);
Sin embargo, es perfectamente válido omitir nombres de parámetros en declaraciones de funciones. Cuando define la función, sin embargo, debe darle un nombre a la matriz, y luego puede referirse a ella con este nombre.
No, es necesario que especifique los últimos N-1 Dimensiones de una matriz.
extern int ap(char[][DIMENSION]);
Para más información lee here
No, esto no está permitido - se trata de declarar el parámetro como un puntero a un tipo de matriz incompleta.
El tipo de matriz debe ser completado con un tamaño, como esto:
extern int ap(char[][10]);
char[][]
no es un tipo de matriz válida porque no se puede tener matrices de un tipo incompleto, y char[]
es incompleta. Sé que es confuso porque realmente tiene dos tipos de matriz, así que aquí hay otro ejemplo con el mismo problema: char a[3][]
. La matriz a tiene longitud 3 y tipo de elemento de char[]
, pero char[]
está, de nuevo, incompleto y es invalid.
Cuando tiene una "matriz multidimensional", realmente tiene una matriz de matrices. Por ejemplo, typedef int U[3][5];
hace U una matriz de longitud 3 de matrices de longitud 5 de ints y es equivalente a typedef int H[5]; typedef H U[3];
.
La razón puede omitir la dimensión más a la izquierda con los parámetros de función se debe a que, con los parámetros de función única, tipos de matriz de la forma T[N]
se transforman en T*
y N se puede omitir, dando T[]
a T*
. Esto solo se aplica al nivel "más alto" o "más externo".
Por lo tanto, todas estas declaraciones de funciones son idénticas:
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);
Usted puede, por supuesto, eliminar el nombre del parámetro un en cualquiera de las declaraciones anteriores sin cambiarlos.
por qué no lo intentas y lo averiguas. –
@darren: "Probarlo" rara vez es la manera correcta de probar la validez de una construcción de lenguaje. Hay suficientes víctimas de "funciona en GCC" (por ejemplo). – AnT