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 指向 {{1 }} ,这意味着 0th arraysizeof(*p)=20*sizeof(int)=80 应该等价于 sizeof(p)输出与我的计算有很大不同!

我能得到解释吗?非常感谢。

解决方法

TL; DR 强> - 始终跟随数据类型

  • p 是指针类型变量,因此 sizeof(p) 是您平台上指针的大小,恰好是 4

  • sizeof(*p),是相同的sizeof(int[R][C]),这是的大小的int,乘以RC。其结果是sizeof(int) == 4(平台),1020,相乘,800

注意:在sizeof运营商的情况下,该阵列不衰变的指针的第一个元素,它保留了类型

这就是说,sizeof产生类型的结果size_t,使用%zu格式说明打印结果。