PDA

View Full Version : [C]Passaggio array multidimensionale ad una funzione


!Matrix!
30-01-2006, 21:08
Ho un problema con il passaggio degli array multidimensionali ai sottoprogrammi..

Questo è il prototipo della mia funzione :

void ricercaelem (int[][],int,int,int *,int *);

Questa è la riga di codice in cui effettuo la chiamata della funzione:

ricercaelem(matr[][NCOL],NRIG,NCOL,&posriga,&poscolonna);

Non riesco a capire perchè il compilatore mi segnala un errore di sintassi prima della parentesi che ho evidenziato..

NCOL l'ho definito uguale a 4 con una DEFINE prima del main..

Ho già provato ad inserire int prima della parentesi ] nella dichiarazione del prototipo ma in quel caso mi segnala l'errore di sintassi anche nel prototipo..

beppegrillo
30-01-2006, 23:15
int **

Ps Ti consiglio di dare i nomi alle variabili nel prototipo.

!Matrix!
31-01-2006, 06:59
Scusami ma non ho capito bene dove devo inserire int ** e perchè devo utilizzare 2 asterischi..

Il nome delle variabili nel prototipo di solito lo uso ma qui sul forum ho postato solo il prototipo e quindi ho inserito solo i tipi di variabile.. ;)

beppegrillo
31-01-2006, 13:53
Scusami ma non ho capito bene dove devo inserire int ** e perchè devo utilizzare 2 asterischi..

Il nome delle variabili nel prototipo di solito lo uso ma qui sul forum ho postato solo il prototipo e quindi ho inserito solo i tipi di variabile.. ;)

Poichè se dichiari un puntatore di puntatore di fatto, stai dichiarando una matrice bidimensionale, se fosse stata unidimensionale bastava un solo asterisco.
Studia un pò i puntatori in C :)

Fenomeno85
31-01-2006, 13:59
int **

Ps Ti consiglio di dare i nomi alle variabili nel prototipo.

va be dai è sbagliato un pò un pò tanto sia in fase di chiamata che di chiamante ... ma può anche usare la sintassi [][]


ricercaelem(matr,NRIG,NCOL,&posriga,&poscolonna);



void ricercaelem (int **matr[],int NRIG,int NCOL,int *posriga,int * poscolonna);


su una cosa però ti do ragione :D ... studia i puntatori :D

~§~ Sempre E Solo Lei ~§~

andbin
31-01-2006, 14:46
Scusate eh ... ma se avete un array es. int array[10][10], alla funzione che riceve l'array non potete dichiarare il parametro come int **arr!!! ;)
Primo perché darebbe warning di incompatible pointer type e poi comunque un puntatore a puntatore a int non va bene per un array bidimensionale di int! Cioè non è la stessa cosa.

!Matrix!
31-01-2006, 17:07
Scusate eh ... ma se avete un array es. int array[10][10], alla funzione che riceve l'array non potete dichiarare il parametro come int **arr!!! ;)
Primo perché darebbe warning di incompatible pointer type e poi comunque un puntatore a puntatore a int non va bene per un array bidimensionale di int! Cioè non è la stessa cosa.

Infatti anche secondo me non si può fare una cosa del genere con un array bidimensionale..

beppegrillo
31-01-2006, 17:17
Infatti anche secondo me non si può fare una cosa del genere con un array bidimensionale..
prova :)
Comunque la migliore cosa è dichiarare i parametri nel prototipo
int ciao[][numero_col] o equivalentemente int *ciao[numero_col]

andbin
31-01-2006, 19:43
Comunque la migliore cosa è dichiarare i parametri nel prototipo int ciao[][numero_col]Sì, questo è ok. È l'alternativa a int ciao[numero_rig][numero_col], in quanto si può omettere il numero delle righe (ma non il numero delle colonne!!!!).

o equivalentemente int *ciao[numero_col] :nono: No ... questo proprio no!! 'ciao' in questo caso è "un array di puntatori a int". Che non è affatto equivalente ad un array bidimensionale.

Qu@ker
31-01-2006, 21:53
int ciao[][numero_col] o equivalentemente int *ciao[numero_col]

int (*ciao)[numero_col];

andbin
01-02-2006, 08:34
int (*ciao)[numero_col]
Così è ok. ;)