computer:c:tips:sizeof
Sizeof的几点事项
标准C定义了一个无符号类型size_t,作为sizeof操作符的返回值类型。
当sizeof的操作数是表达式时,通常不进行类型转换,所以当操作数是数组时,sizeof能获得数组的大小,而不是数组转换为的指针的大小。但如果表达式中包含其他操作符,需要进行类型转换后才能决定表达式size时,则将进行类型转换。
例如:
short s = 4; printf("%ld\n", sizeof(s + 0));
这里sizeof(s + 0)=sizeof(int),因为s+0导致short提升为int。
此外,当sizeof的操作数是表达式时,对表达式的分析是在编译阶段进行的,也就是说该表达式并不进行计算。如:
int i = 1; printf("%ld\n", sizeof(i++));
这里i的值依旧为1,而不是2。
但对于变长数组(variable length array),如果数组大小表达式影响sizeof的计算结果,则该表达式必须先计算;如果不影响,则该表达式可算可不算。如:
int n = 10; int a[n++];
这里n的值为11。
而:
static int f(int *n) { return ++(*n); } int main(void) { int n = 10; printf("%ld\n", sizeof(int (*)[f(&n)])); }
这里n的值可为10,也可为11,因为f()不影响sizeof的结果。
computer/c/tips/sizeof.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1