Ich habe ein sehr einfaches, aber eindringliches Problem über Zeiger und Array:Verwirrung über Zeiger auf ein Array
int main() {
int a[5] = { 1,2,3,4,5 };
int(*pa)[5] = &a;
std::cout << a << std::endl;
std::cout << &a << std::endl;
std::cout << pa << std::endl;
std::cout << (*pa) << std::endl;
return 0;
}
Überraschenderweise alle vier Ausgänge geben die gleiche Adresse, so etwas wie '006AF784'
, die a == &a
und pa == *pa
bedeutet. Das ergibt für mich keinen Sinn!
I natürlich verstehen 'a'
ist der Zeiger auf das erste Element während '&a'
der Zeiger auf das gesamte Array ist, so unterscheidet sich von 'a+1'
'&a+1'
. Aber eine Variable ist gleich ihrer Adresse und ein Zeiger ist gleich dem Inhalt, auf den hinweist, was für mich nicht verständlich ist. Ich frage mich, was genau in C und Compiler vor sich geht.
Es ist wahrscheinlich, dass die Variable 'a' als ein Objekt betrachtet werden sollte, das 5 Ints enthält. So wird std :: cout << a in count << & a [0] umgewandelt, um die Adresse der ersten ganzen Zahl zu drucken, und std :: cout << & a gibt die Adresse des gesamten Objekts aus, das natürlich von seinem ersten Element aus startet . – Roy
@Roy Es ist nicht nur wahrscheinlich, es ist eine Tatsache. Das sind Arrays. – molbdnilo