Betrachten Sie dieses Beispiel:
#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
);
}
Sie werden feststellen, dass alle 5 in ersten Fall gedruckten Werte alle gleich sind. Weil sie auf den gleichen Ausgangsort zeigen.
Aber nur, wenn Sie sie um 1 erhöhen, sehen Sie, dass verschiedene Zeiger jetzt zu verschiedenen Orten springen (zeigen). Dies liegt daran, dass myArray[0][0][0] + 1
um 10 ganzzahlige Werte, die 40 Bytes sind, springt, während myArray[0][0] + 1
um 100 ganzzahlige Werte, d. H. Um 400 Bytes, springt. Ähnlich springt myArray[0] + 1
um 1000 ganzzahlige Werte oder 4000 Bytes.
Also die Werte hängen davon ab, was Pegel des Zeigers Sie beziehen sich auf.
Aber jetzt, wenn ich Zeiger verwenden, um alle von ihnen zu beziehen:
#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);
}
Sie sehen also, verschiedene Ebenen von Zeigervariablen verhalten sich nicht so, wie die Array-Variable tut.
'auto' spielt nicht gut mit Zeigern, es ist in der Regel nicht vertrauenswürdig mit dieser Art von Typen. – user2485710
@ user2485710 Können Sie das näher ausführen? Irgendwelche Referenzen/Zitate? – Domi
'Auto' funktioniert gut mit Zeigern, keine Ahnung, wo Sie diese Idee haben. –