sizeof(p)和sizeof(*p)之间不同,而p具有矩阵的基本类型
我正在学习指针,由于以下程序给出的输出,我有点困惑:
#include <stdio.h>
#define R 10
#define C 20
int main()
{
int arr[R][C];
int (*p)[R][C]=&arr;
printf("%d ", sizeof(p));
printf("%d ", sizeof(*p));
return 0;
}
输出 : 4 800
为什么输出是800?我们知道这p是一个具有二维10行和20列数组的基本类型的指针,这意味着*p指向矩阵0th array的 ,这意味着sizeof(*p)=20*sizeof(int)=80并且sizeof(p)应该等同于800但输出与我的计算不同!
我能得到解释吗?非常感激。
回答
TL;DR - 始终遵循数据类型!
-
p是指针类型变量,sizeof(p)平台上指针的大小也是如此,恰好是4. -
sizeof(*p), 与 相同sizeof(int[R][C]),后者是 an 的大小int,乘以R和C。结果是sizeof(int) == 4(在您的平台上),10并且20相乘,800。
注意:在sizeof运算符的情况下,数组不会衰减到指向第一个元素的指针,它保留类型。
也就是说,sizeof产生 type 的结果size_t,使用%zu格式说明符打印结果。