int arr[3]={1,2,3};
int *ptrArr;
Cosa succede dopo:
ptrArr=arr;
e
arr=ptrArr;
Secondo me le 2 variabili contengono lo stesso indirizzo che è l'indirizzo base dell'array xò nn sono sicuro...
int arr[3]={1,2,3};
int *ptrArr;
Cosa succede dopo:
ptrArr=arr;
e
arr=ptrArr;
Secondo me le 2 variabili contengono lo stesso indirizzo che è l'indirizzo base dell'array xò nn sono sicuro...
Nel caso di
int arr[3]={1,2,3};
int *ptrArr;
ptrArr=arr;
prtArr contiene effettivamente l'indirizzo di partenza di arr (in C, vettori e puntatori sono la stessa cosa: i vettori sono solo una comodità per il programmatore, ma sono trattati come puntatori)
Invece, nel caso di
int arr[3]={1,2,3};
int *ptrArr;
arr=ptrArr;
arr non punta più ai dati del vettore (il cui indirizzo va perso), ma a ciò a cui punta ptrArr, sempre che punti a qualcosa. Se non punta a niente (e alcuni compilatori non se ne accorgono!), rischi di beccarti un errore di accesso a memoria non valido.
Per completezza, nel caso di
int arr[3]={1,2,3};
int *ptrArr;
ptrArr=arr;
arr=ptrArr;
in pratica non succede niente: ptrArr e arr punteranno entrambi al vettore.
In effetti le cose stanno un po diversamente . In C il nome di un array, nel caso specifico arr[] , è una costante , non una variabile ! Mentre ptrArr è una variabile . Quindi operazioni come ptrArr=arr o ptrArr++ sono legali , ma non lo sono operazioni come arr=ptrArr .