2017-05-30 63 views
1

我目前正在參加C++課程,我們正在學習指針。以下是我的教授給我們的例子。Sizeof運算符來測量二維數組

int b[3][3]; //Assume integers and memory addresses are 4 bytes 
cout << sizeof(b) << endl; // 36 bytes 
cout << sizeof(b+0) << endl; // 4 bytes 
cout << sizeof(*(b+0)) << endl; //12 bytes 

我有2個問題:

  1. 我想第二個(sizeof(b+0)),它給了我8呢?情況如何?

  2. 另外我想了解第三個邏輯背後的邏輯(sizeof(*(b+0));是12,因爲它是第一排的總數?由於有3個int,每個int都是4個字節,因此總共返回12個字節?

任何幫助非常感謝!

+3

C與C++不一樣;您應該刪除C標記 – Miket25

+0

sizeof不是函數。它是關鍵字。 – ikh

回答

1

的sizeof函數..

sizeof操作者,不是一個函數。閱讀更多於Why is sizeof considered as an operator?

它給我8而不是嗎?

它衰變爲指針

它是12,因爲它是第一行的總數?

是的。這就像有一個3個整數的一維數組。


您可能要過檢查這些:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall main.cpp 
main.cpp:8:21: warning: sizeof on pointer operation will return size of 
     'int (*)[3]' instead of 'int [3][3]' [-Wsizeof-array-decay] 
    cout << sizeof(b+0) << endl; // 4 bytes 
        ~^ 
1 warning generated. 
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 
36 
8 
12 
4 // sizeof(int) 
8 // sizeof(int*) 

關於警告:

「這個警告是告訴你,如果你打電話sizeof(int[])你不會得到的大小數組,但指針的大小爲int*。「

取自answer

0

1)在具有64位地址的系統中,指針有8個字節,64/8。 2)2D數組存儲爲指向數組的指針數組。所以當你執行*(b + 0)時,它會給出數組b的第一個位置的內容,這是一個3個整數的數組。 *(b + 0)等同於b [0]。

+0

基本上與@gsamaras給出的答案相同,但寫法不同。 HTH – frt