c/c++對數組取地址

沒怎麼用過c/c++,今天偶然碰到一個問題,記錄一下。


int a[3] = {1, 2, 3};

cout << a << endl;

cout << &a <<endl;


輸出的結果一樣嗎?


答案是一樣,不一樣我也不用寫了。初看起來有點奇怪,因爲數組名是指針,那直覺上&a應該是對a這個指針變量取地址,所以結果應該是不一樣,這是爲什麼?


原來實際上,a是指向a[0]的指針,而&a是指向整個數組的指針。

有點拗口,指向整個數組的指針當然是指向整個數組的起始地址,也就是a[0],所以a和&a的值是一樣的,但是這裏注意,雖然他們的值是一樣的,但是他們所代表的的含義卻是不同的,就像假如char*指向0025F88C這個地址,再用一個int*也指向0025F88C,雖然這兩個指針的值一樣,但是一個char指針,一個是int指針,對這兩個指針進行加減表示的含義是不同的,寫同樣的代碼給他們都+1,char指針只移動了一個字節,而int指針會移動4個字節,同理,&a+1相當於移動了sizeof(a)個字節。


那麼,看下面的語句:


int a[3] = {1, 2, 3};
cout << *( (int*)(&a + 1)-1 ) <<endl;

輸出是什麼?自己試試吧


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章