View Full Version : [C] Array di Puntatori
cagnulein
16-01-2005, 16:14
Ciao ragazzi...sto impazzendo su una cosa.
Ho un array tridimensionale dichiarato in questo modo
long array3d[2][100][1000];
e poi ho un array di puntatori dichiarato in questo modo
long *punt_array[1000];
allora io vorrei passare una dimensione del primo array come puntatore nel secondo...
cioè una cosa di questo tipo:
punt_array=array3d[0][2];
è possibile fare una cosa del genere?
Grazie e ciao :)
VegetaSSJ5
16-01-2005, 16:30
si dovrebbe fare così:for (i=0; i<1000; ++i) punt_array[i]= &array3d[0][2][i];cmq attendi conferme da gente più autoritaria...;)
Ziosilvio
16-01-2005, 19:12
Vuoi passare la dimensione di un array come valore?
Non vorrei sbagliare, ma si può fare solo se l'array è monodimensionale: in questo caso, il metodo è:
size = sizeof(a)/sizeof(a[0]);
Se però devi fare conti con matrici multidimensionali, mi sa che ti conviene implementarle con un tipo strutturato in cui registri sia le dimensioni, sia i valori (questi ultimi si fanno con i puntatori a puntatori).
cagnulein
16-01-2005, 19:15
no no non voglio passare la sua dimensione...bensì voglio che ogni indice del puntatore di array punti all'indice della tabella passata. Esempio
*punt_array[1] deve contenere lo stesso valore di array3d[0][2][1].
*punt_array[100] deve contenere lo stesso valore di array3d[0][2][100].
e così via....
praticamente mi serve perchè in una funzione devo passare un array, e devo modificarlo...
VegetaSSJ5
16-01-2005, 19:32
Originariamente inviato da cagnulein
no no non voglio passare la sua dimensione...bensì voglio che ogni indice del puntatore di array punti all'indice della tabella passata. Esempio
*punt_array[1] deve contenere lo stesso valore di array3d[0][2][1].
*punt_array[100] deve contenere lo stesso valore di array3d[0][2][100].
e così via....
praticamente mi serve perchè in una funzione devo passare un array, e devo modificarlo...
Ziosilvio deve aver frainteso, cmq dovrebbe essere come ho deto io. adesso però servirebbe una bella conferma da parte di Ziosilvio... :sofico: :D
Ziosilvio
16-01-2005, 20:31
Anzitutto, chiedo scusa per aver frainteso.
Poi: sì, allora mi sa che quello che vuole fare cagnulein si può fare, tra l'altro proprio come ha detto VegetaSSJ5.
Motivo: se array3D è un array di array di array di int, e punt_array è un array di int, allora punt_array[n] e array3D[j][k][n] sono int per ogni valore "lecito" di n, j e k.
Il codice di cagnulein fa un'altra cosa lecita, ossia scrive in punt_array l'indirizzo di array3D[j][k], che ovviamente è un array di int: in questo modo è possibile modificare i valori di array3D[j][k][n] per mezzo di una funzione con un codice del tipo:
void set(int val, int *arr, int loc)
{
arr[loc] = val;
}
/* bla bla bla */
set(valore,array3D[j][k],indice);
Tutte queste cose sono rese possibili dall'equivalenza tra puntatori e array, che è spiegata molto bene in quello che è --- e che non è --- nelle FAQ del newsgroup comp.lang.c curate da Steve Summitt.
(Il link è in un mio post nella terza pagina del thread sui migliori libri di programmazione.)
cagnulein
17-01-2005, 05:53
grazie, ora proverò :)
cagnulein
17-01-2005, 11:44
grassie, funsiona :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.