gpt4 book ai didi

c++ - Sizeof 指向数组的指针

转载 作者:可可西里 更新时间:2023-11-01 17:37:24 26 4
gpt4 key购买 nike

如果我有一个这样声明的数组:

int a[3][2];

那么为什么是:

sizeof(a+0) == 8

鉴于:

sizeof(a)   == 24

我不明白向指针添加 0 如何改变 sizeof 输出。是否有一些隐式类型转换?

最佳答案

如果将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 字节。

希望这能澄清事情。

关于c++ - Sizeof 指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7759126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com