标签:
C中的该运算符的使用方式是sizeof(type_name);可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。要注意sizeof是运算符,它在编译时起作用,而不是运行时。返回值为unsigned int 类。
从名字可以看出size of 即测量类型的长度,但此处就产生了一个问题:传入普通的类型时还好,肯定是测量这个类的长度的,结构也可以。但传入数组的时候问题来了——数组名是指针,那么传入数组的时候测量的是只针对的长度呢,还是指针指向的内存的长度呢?此处我就被坑了!
且看代码如下:
#include<stdio.h> void main(){ void print(int *c,int d[][3]); int a[10],b[2][3]; printf("%d\t%d\t",sizeof(a),sizeof(b)); print(a,b); } void print(int *c,int d[][3]){ printf("%d\t%d\n",sizeof(c),sizeof(d)); }
其输出结果可能会出乎某些人的意料
40 24 4 4
为什么是这种结果呢,其实sizeof本来是测量类型的长度的。而数组本身其实是通过指针来实现的,所以实际测量的其实是指针的长度,至于测量数组的长度仅在数组的作用域里可以实现,一旦传入其他函数中就会编程一个指针而已
标签:
原文地址:http://www.cnblogs.com/CaiNiaoShuo/p/4851257.html