Perché sono 2 tipi completamente diversi! Puoi usare int **p per un array bidimensionale di interi ma l'allocazione è da fare in modo completamente diverso.Originariamente inviato da zuffff
Devo allocare dinamicamente una matrice di interi;
perchè non è possibile farlo in questo modo?:
int **p;
p=new int[5][5];
grazie
Esempio:
Dichiarando int **matrice, si dichiara "un puntatore a puntatore a int". Questo vuol dire che l'unico modo per avere così un array bidimensionale, è quello di creare "un array di array". Con la prima new alloco un array di puntatori ad int. Con le successive N new alloco N array di interi. In questo modo matrice[i][j] si comporta proprio come volevi.codice:int i; int **matrice; matrice = new int*[5]; for (i = 0; i < 5; i++) matrice[i] = new int[5];
Mentre invece int matrice[5][5] è una cosa molto diversa. Intanto solo questo è il vero array bidimensionale come inteso dal "C", cioè un insieme contiguo di elementi. Quello di prima è "un array di array", cioè un semplice array in cui ogni elemento punta ad un altro array.
Se provi a compilare il tuo codice, otterresti un errore di questo tipo:
cannot convert `int (*)[5]' to `int**' in assignment
I due tipi sono molto diversi. Dichiarando int matrice[5][5], per accedere ad una cella [i][j], il compilatore produce un qualcosa del tipo:
*(((int*) matrice) + i*5 + j)
Che è quindi ben diverso dal dereferenziare 2 volte un puntatore **.
Spero di aver spiegato bene la questione.![]()