今天研究了一下sizeof,之前一直以为它是函数,因为它有参数也有返回值,不过今天发现sizeof实际上是一个...恩,算是运算符吧,或者说他是一个宏,因为他是在编译时确定值的,而表达式中的任何运算和函数调用都不会发生。不过有一个例外是C99支持的不定长数组,这时会计算不定长数组的长度。
废话少说,先看一段代码,今天测试sizeof的时候发现的。
代码运行的结果是
40
4
40
第一个结果不解释了,就是数组所占的内存空间。
第三个结果也不解释了,引用就表示数组本身,也是数组所占的内存空间。
关键来看一下第二个结果。在C语言中,数组名是被当成指针来处理的,具体来讲数组名就是指向数组首元素地址的指针,因此,当数组名被当成参数传递到函数中时,数组名会自动转变成指针,所以此时sizeof的结果就是指针所占的内存大小,在32位系统下就是4
另一个概念,C语言的编译器遇到数组元素array[i],就会替换成*(array+i)的形式。