Considerate questo esempio:
#include<stdio.h>
int main()
{
int myArray[10][10][10][10]; //A 4 Dimentional array;
//THESE WILL ALL PRINT THE SAME VALUE
printf("%d, %d, %d, %d, %d\n",
myArray,
myArray[0],
myArray[0][0],
myArray[0][0][0],
&myArray[0][0][0][0]
);
//NOW SEE WHAT VALUES YOU GET AFTER ADDING 1 TO EACH OF THESE POINTERS
printf("%d, %d, %d, %d, %d\n",
myArray+1,
myArray[0]+1,
myArray[0][0]+1,
myArray[0][0][0]+1,
&myArray[0][0][0][0]+1
);
}
Troverete che tutti i 5 valori stampati in primo caso sono tutti uguali. Perché indicano la stessa posizione iniziale.
Ma proprio quando si incrementano di 1 si vede che i diversi puntatori ora saltano (punto) in posizioni diverse. Questo perché myArray[0][0][0] + 1
salterà di 10 valori interi di 40 byte, mentre myArray[0][0] + 1
salterà di 100 valori interi, vale a dire 400 byte. Allo stesso modo myArray[0] + 1
salta di 1000 valori interi o 4000 byte.
Così i valori dipendono ciò livello di puntatore si fa riferimento.
Ma ora, se io uso i puntatori per indicare tutti loro:
#include<stdio.h>
int main()
{
int myArray[10][10][10][10]; //A 4 Dimentional array;
int * ptr1 = myArray[10][10][10];
int ** ptr2 = myArray[10][10];
int *** ptr3 = myArray[10];
int **** ptr4 = myArray;
//THESE WILL ALL PRINT THE SAME VALUE
printf("%u, %u, %u, %u\n", ptr1, ptr2, ptr3, ptr4);
//THESE ALSO PRINT SAME VALUES!!
printf("%d, %d, %d, %d\n",ptr1+1,ptr2+1,ptr3+1,ptr4+1);
}
Quindi, vedete, i diversi livelli di variabili puntatore non si comportano il modo in cui la variabile di matrice fa.
'auto' non funziona correttamente con i puntatori, in genere non è affidabile con questo tipo di tipi. – user2485710
@ user2485710 Puoi approfondire questo? Eventuali riferimenti/citazioni? – Domi
'auto' funziona perfettamente con i puntatori, nessun indizio su dove hai preso l'idea. –