2017-05-30 64 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