如果我有一个像这样声明的数组:
int a[3][2];
Run Code Online (Sandbox Code Playgroud)
那么为什么:
sizeof(a+0) == 8
Run Code Online (Sandbox Code Playgroud)
然而:
sizeof(a) == 24
Run Code Online (Sandbox Code Playgroud)
我不明白如何向指针添加0会改变sizeof输出.可能有一些隐式类型转换吗?
Joh*_*itb 12
如果添加0到a,则a首先将其转换为类型的指针值int(*)[2](指向类型数组的第一个元素int[3][2]).然后0添加到那个,它将0 * sizeof(int[2])字节添加到由该指针值表示的地址.由于该乘法产生0,因此它将产生相同的指针值.因为它是一个指针,所以sizeof(a+0)产生指针的大小,这是你的盒子上的8个字节.
如果这样做sizeof(a),编译器没有理由转换a为指针值(只有当你想索引元素或做涉及元素地址的指针算术时才有意义).因此表达式a保持为数组类型,而您获得的大小int[3][2]相反int(*)[2].那么,3 * 2 * sizeof(int)你的盒子上有24个字节.
希望这能澄清事情.
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |