sizeof是在编译时候计算的
所以对表达式或者函数进行sizeof,只是多结果类型进行sizeof,不会进行表达式计算或者函数运行。如下
int i=1;
printf("%d\n",sizeof(i++));
printf("%d\n",i);
// 结果:
// 4
// 1
// 并不会改变i的实际大小
不能对void类型进行sizeof
sizeof(void) 在不同编译器会有不同表现,gcc返回的是1,vc返回的是0,有些编译器甚至都不能通过。
函数内对数组参数名进行sizeof
#include <stdio.h>
void test(int arr[])
{
int sz = sizeof(arr);
printf("%d\n", sz);
}
int main(void)
{
int arr[10] = { 0 };
test(arr);
return 0;
}
// 输出的结果是:8
#include <stdio.h>
int main(void)
{
int arr[10] = { 0 };
int sz = sizeof(arr);
printf("%d\n", sz);
return 0;
}
// 输出的结果是:40
因为传递到函数内的数组名只是一个指针,相当于sizeof(指针),32位系统的指针长度为4,如果64位就是8了,如果要获取真实大小可以把数组长度也传进来计算。