* p的大小,其中p是指向2D数组的指针

时间:2014-04-25 11:41:36

标签: c

一个简单的C程序:

  #define MAXROW 2
  #define MAXCOL 2

  int main()
  {
    int (*p)[MAXROW][MAXCOL];
    printf("%d\n",sizeof(*p));
    return 0;
  }

答案是16。 我不明白怎么做。

遵循这条规则:

size =元素数* sizeof(指针变量,即4)

有人能告诉我如何分析这个表达式,以便答案变得明显吗?

2 个答案:

答案 0 :(得分:5)

  • sizeof(int) = 4在您的计算机上。
  • p是一个数组指针,指向2 * 2 int的2D数组。
  • sizeof(*p)给出了p可以指向的类型的大小,即数组的大小。
  • 数组的大小= 2 * 2 * 4 = 16.

答案 1 :(得分:1)

你有

int* p[MAXROW][MAXCOL];

并调用sizeof(*p),这是整数数组数组的大小

所以*p是:

int[2][2]

sizeof(*p) == sizeof(int) * 2 * 2

解释指针和数组的示例:

int a = 2; //a is an integer with the value 2
sizeof(a); //4 because an integer on your system does probably have 4 Byte
int b[2] = {1, 2};
int *c = b; //1d array
assert(sizeof(b) == sizeof(c)); //size of 1d array = size of 2 integers = 8 Byte
assert(sizeof(*c) == sizeof(b[0]));// size of 1 integer = 4 Byte