11/11/2019, 19:15
11/11/2019, 21:57
int x = 5;
int *pun = &x;
printf("Indirizzo di x: %x\n", &x);
printf("Contenuto di x: %d\n", x);
printf("Indirizzo della variabile puntata da pun: %x\n", pun);
printf("Contenuto della variabile puntata da pun: %d\n", *pun);
ESECUZIONE PROGRAMMA:
Indirizzo di x: c02f1f54
Contenuto di x: 5
Indirizzo della variabile puntata da pun: c02f1f54
Contenuto della variabile puntata da pun: 5
Il mio dubbio nasce dal fatto che fino ad ora per passare una matrice ad una function ho sempre scritto "float A[][LDA]" nel caso della matrice A e non "*A"
12/11/2019, 00:55
Il mio dubbio nasce dal fatto che fino ad ora per passare una matrice ad una function ho sempre scritto "float A[][LDA]" nel caso della matrice A e non "*A"
Credo che le due istruzioni siano equivalenti, dal momento che in entrambi i casi viene passato l'indirizzo della prima variabile dell'array in memoria, ma vorrei una conferma.
12/11/2019, 01:27
A[i * cols + j]
12/11/2019, 12:28
Leyxargon ha scritto:Restando in tema di puntatori, una matrice (array bidimensionale) corrisponde ad un puntatore di puntatore, o ad un array di puntatori, dove ogni elemento dell'array corrisponde al puntatore di una riga della matrice.
int matrice[3][4]
non è altro che un array di dimensione 12 a cui si accede usando un puntatore ad array di dimensione 4. In altre parole il codice int f( int matrice[3][4] );
int f( int matrice[][4] );
int f( int (*matrice)[4] );
int f( int** matrice );
12/11/2019, 17:23
vict85 ha scritto:Leyxargon ha scritto:Restando in tema di puntatori, una matrice (array bidimensionale) corrisponde ad un puntatore di puntatore, o ad un array di puntatori, dove ogni elemento dell'array corrisponde al puntatore di una riga della matrice.
Non è assolutamente vero. L'utilizzo di array di puntatori per le matrici è comune nei corsi universitari ma non l'ho mai visto usare da nessun'altra parte. Gli array di puntatori sono ovviamente usati, ma per altri usi.
Un matrice del tipoint matrice[3][4]
non è altro che un array di dimensione 12 a cui si accede usando un puntatore ad array di dimensione 4. In altre parole il codice
- Codice:
int f( int matrice[3][4] );
può essere sostituito dai codicioppure
- Codice:
int f( int matrice[][4] );
con gli stessi significati. Mentre
- Codice:
int f( int (*matrice)[4] );
non è per nulla equivalente.
- Codice:
int f( int** matrice );
Insomma, la memoria è continua. Array e puntatori non sono esattamente la stessa cosa e non vanno confusi.
Come per gli array monodimensionali, anche per le matrici è possibile utilizzare la notazione a puntatore, dove per accedere all'elemento contenuto nella i-esima colonna (di dimensione n) e j-esima riga si usa *(M + i*n + j).
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.
Powered by phpBB © phpBB Group - Privacy policy - Cookie privacy
phpBB Mobile / SEO by Artodia.