PDA

View Full Version : Passaggio per indirizzo di un array bidimensionale


AMDrea\'80
05-05-2002, 14:53
Il caso č questo:
- dichiarazione array:

char cTabellone[15][30];

- chiamata della funzione con passaggio dell'array x indirizzo:

visualizza_tabellone(cTabellone);

- prototipo della funzione:

void visualizza_tabellone(char *cTabellone);

Dove sbaglio?
Grazie!

MickMacello
05-05-2002, 18:58
.

AMDrea\'80
05-05-2002, 19:06
Ma il prototipo della funzione ha bisogno di qualche modifica?

AMDrea\'80
05-05-2002, 19:11
Perchč come mi hai detto tu mi accetta solo la prima dimensione, e nella funzione posso usarlo solo come array monodimensionale.

MickMacello
05-05-2002, 19:33
ritiro tuttoooooooooo


scusa mi sono fumanto il brain

cionci
05-05-2002, 20:05
void visualizza_tabellone(char **cTabellone)

Un vettore bidimensionale č a tutti gli effetti un vettore di puntatore quindi bisogna passargli un puntatore a un puntatore...

MickMacello
06-05-2002, 01:13
Puoi fare cosė se puoi passare le dimensioni dell' array:

#include <stdio.h>
void q(char p[15][30]);


int main(){

int i;
char cTabellone[15][30];
for(i=0;i<30;++i){
cTabellone[0][i]='0';
cTabellone[1][i]='A';
}
q(cTabellone);
}

void q(char p[15][30]){
printf("%c",p[1][1]);
}


o cosė:


#include <stdio.h>
void q(char *p);


int main(){

int i;
char cTabellone[15][30];
for(i=0;i<30;++i){
cTabellone[0][i]='0';
cTabellone[1][i]='A';
}
q(&cTabellone[0][0]);
}

void q(char *p){
printf("%c",*(p+31)); //*(p+31) in questo caso č il primo elemento dell' array = A
}

In questo secondo caso sarebbe meglio passare alla funzione le dimensioni dell' array in 2 variabili separate aggiuntive tipo:
int main(){
...
q(&cTabellone[0][0],15,30)
...
}


void q(char *p,int righe,int colonne){
...
}

cionci
06-05-2002, 08:40
MickMacello : nel primo caso, se non sbaglio, passi l'array per valore...non oso pensare quanto sia lento ;)
Nel secondo non puoi pių usare l'indicizzazione bidimensionale, ma solo quella monodimensionale...

MickMacello
06-05-2002, 17:58
Originariamente inviato da cionci
[B]MickMacello : nel primo caso, se non sbaglio, passi l'array per valore...non oso pensare quanto sia lento ;)
no lo passo per indirizzo prova tu stesso ;) :

#include <stdio.h>
void q(char p[15][30]);


int main(){
int k,j;
char cTabellone[15][30];
for(k=0;k<15;++k)
for(j=0;j<30;++j)
cTabellone[k][j]='Q';
for(k=0;k<15;++k)
for(j=0;j<30;++j)
printf("%d\t%c\n",k*30+j,cTabellone[k][j]);
printf("\n");
q(cTabellone);
for(k=0;k<15;++k)
for(j=0;j<30;++j)
printf("%d\t%c\n",k*30+j,cTabellone[k][j]);
printf("\n");
}

void q(char p[15][30]){
int k,j;
for(k=0;k<15;++k)
for(j=0;j<30;++j)
p[k][j]='Z';
}


forse ti riferisci alla classe vector della STL del C++

Originariamente inviato da cionci
[B]
Nel secondo non puoi pių usare l'indicizzazione bidimensionale, ma solo quella monodimensionale...

Sė questo č vero.

cionci
06-05-2002, 18:38
Ah...č vero...

Inoltre con i vettori statici lo devi per forza passare come hai detto tu nel primo esempio...o al massimo cosė : void q(char p[][23])

Non sono abituato a lavorare con i vettori statici :p

AMDrea\'80
06-05-2002, 21:22
Originariamente inviato da MickMacello
[B]Puoi fare cosė se puoi passare le dimensioni dell' array:

#include <stdio.h>
void q(char p[15][30]);


int main(){

int i;
char cTabellone[15][30];
for(i=0;i<30;++i){
cTabellone[0][i]='0';
cTabellone[1][i]='A';
}
q(cTabellone);
}

void q(char p[15][30]){
printf("%c",p[1][1]);
}




Grazie mille, ho risolto con qs metodo!