关于sizeof与&a的疑问

#C语言 #sizeof #指针 #数组

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

这是肿么了?!