一个简单的C程序:
#define MAXROW 2
#define MAXCOL 2
int main()
{
int (*p)[MAXROW][MAXCOL];
printf("%d\n",sizeof(*p));
return 0;
}
答案是16。 我不明白怎么做。
遵循这条规则:
size =元素数* sizeof(指针变量,即4)
有人能告诉我如何分析这个表达式,以便答案变得明显吗?
答案 0 :(得分:5)
sizeof(int) = 4
在您的计算机上。p
是一个数组指针,指向2 * 2 int的2D数组。sizeof(*p)
给出了p
可以指向的类型的大小,即数组的大小。答案 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