possiamo dichiarare una funzione in un file di intestazione nel modo seguente?Dichiarazione di funzione C
extern int ap(char[][]);
possiamo usare char [] [] in funzione?
possiamo dichiarare una funzione in un file di intestazione nel modo seguente?Dichiarazione di funzione C
extern int ap(char[][]);
possiamo usare char [] [] in funzione?
Per un array bidimensionale, è necessario fornire una dimensione per l'ultima dimensione altrimenti il compilatore non sa come usarlo. (Va bene di omettere il nome però.)
come questo:
extern int ap(char[][10]);
Tuttavia, è perfettamente valido omettere i nomi dei parametri nelle dichiarazioni di funzione. Quando si imposta la funzione , tuttavia, è necessario assegnare un nome all'array e quindi è possibile fare riferimento a tale nome.
No, è necessario specificare gli ultimi N-1 dimensioni per un array.
extern int ap(char[][DIMENSION]);
Per ulteriori informazioni consultare here
No, questo non è consentito - tenta di dichiarare il parametro come un puntatore a un tipo di matrice incompleta.
Il tipo di matrice deve essere completato con una dimensione, come questo:
extern int ap(char[][10]);
char[][]
non è un tipo di matrice valida perché non si può avere array di un tipo incompleto, e char[]
è incompleto. So che è confuso perché hai davvero due tipi di array, quindi ecco un altro esempio con lo stesso problema: char a[3][]
. L'array a ha lunghezza 3 e tipo di elemento char[]
, ma char[]
è, ancora, incompleto e questo è invalid.
Quando si dispone di un "array multidimentale", si dispone di una serie di array. Ad esempio, typedef int U[3][5];
rende U un array di lunghezza 3 di array di lunghezza 5 di ints ed è equivalente a typedef int H[5]; typedef H U[3];
.
Il motivo è possibile omettere la dimensione più a sinistra con parametri di funzionamento è perché, con parametri di funzionamento solo, tipi di matrice della forma T[N]
si trasformano in T*
e N può essere omesso, dando T[]
a T*
. Questo si applica solo al livello "più alto" o "più esterno".
Quindi, tutte queste dichiarazioni di funzione sono identiche:
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);
È possibile, ovviamente, eliminare il nome del parametro un in una delle dichiarazioni di cui sopra senza modificarli.
perché non provarlo e scoprirlo. –
@darren: "Trying it" è molto raramente il modo giusto per verificare la validità di un controlo linguistico. Ci sono abbastanza vittime di "funziona in GCC" là fuori (per un esempio). – AnT