我對指針和數組一個非常基本的,但困擾的問題:混淆指向數組的指針
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;
}
出人意料的是,所有四個輸出給同一個地址,像'006AF784'
,這意味着a == &a
和pa == *pa
。這對我沒有任何意義!
我明白當然'a'
的是指針的第一個元素,同時'&a'
是指針到整個數組,所以'a+1'
是從'&a+1'
不同。但是一個變量等於它的地址,一個指針等於指向我無法理解的內容。我想知道C和編譯器中究竟發生了什麼。
變量'a'可能被認爲是一個包含5個整數的對象。因此,std :: cout << a被轉換爲count <<&a [0]來打印第一個整數的地址,而std :: cout <<&a打印整個對象的地址,當然從它的第一個元素開始。 – Roy
@羅伊這不僅是可能的,這是一個事實。這就是數組。 – molbdnilo