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,乘以RC。结果是sizeof(int) == 4(在您的平台上),10并且20相乘,800

注意:在sizeof运算符的情况下,数组不会衰减到指向第一个元素的指针,它保留类型。

也就是说,sizeof产生 type 的结果size_t,使用%zu格式说明符打印结果。


以上是sizeof(p)和sizeof(*p)之间不同,而p具有矩阵的基本类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>