sizeof
是一个在C语言里常被人误会的的东西。许多人的以为它是个函数,其实不然。只要查一下 C语言保留关键字列表,就会发现sizeof
赫然在表上。或者查一下C语言运算符优先级方面的资料,也可以在里面发现sizeof
的身影。
不过,也难怪人们会误会sizeof
是个函数,谁叫它的身后总是跟着一对括号呢~那么大家可以去试编译下面这个程序:
int main()
{
int n, l;
l = sizeof n;
printf("%d", l);
return 0;
}
你会发现,原来这样也是可以的!那么如果把第二句的sizeof n
换成sizeof int
。又会如何呢?大家可以去试一下。
其实,这次文章主要不是想讲sizeof
,而是&a
,前几日在拿sizeof
做实验时发现的一些问题。
我们知道,在C语言里,无论是什么指针变量,其空间总是占有4个字节。也就是说:
int main()
{
int n;
char c;
printf("%d, %d", sizeof(&n), sizeof(&c));
return 0;
}
输出结果都是4
。
但是,如果将程序改变一下:
int main()
{
int a[5];
char c[5];
printf("%d,%d",sizeof(&a),sizeof(&c));
}
这样,他们输出的结果就不同了,变成了 20,5
。在Turbo C 中则是 10,5
。
这是肿么了?!