跳至内容
响水凹
欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki
用户工具
登录
站点工具
搜索
工具
显示页面
过去修订
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
computer:c:tips:sizeof
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== Sizeof的几点事项 ====== 标准C定义了一个无符号类型size_t,作为sizeof操作符的返回值类型。 当sizeof的操作数是表达式时,通常不进行[[.:type_conversions|类型转换]],所以当操作数是数组时,sizeof能获得数组的大小,而不是数组转换为的指针的大小。但如果表达式中包含其他操作符,需要进行类型转换后才能决定表达式size时,则将进行类型转换。 例如: <code c> short s = 4; printf("%ld\n", sizeof(s + 0)); </code> 这里sizeof(s + 0)=sizeof(int),因为s+0导致short提升为int。 此外,当sizeof的操作数是表达式时,对表达式的分析是在编译阶段进行的,也就是说该表达式并不进行计算。如: <code c> int i = 1; printf("%ld\n", sizeof(i++)); </code> 这里i的值依旧为1,而不是2。 但对于变长数组(variable length array),如果数组大小表达式影响sizeof的计算结果,则该表达式必须先计算;如果不影响,则该表达式可算可不算。如: <code c> int n = 10; int a[n++]; </code> 这里n的值为11。 而: <code c> static int f(int *n) { return ++(*n); } int main(void) { int n = 10; printf("%ld\n", sizeof(int (*)[f(&n)])); } </code> 这里n的值可为10,也可为11,因为f()不影响sizeof的结果。 {{tag>C语言}}
computer/c/tips/sizeof.txt
· 最后更改: 2014/11/01 02:02 由
127.0.0.1
页面工具
显示页面
过去修订
反向链接
回到顶部