作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
#include <stdio.h>
int main()
{
short int i = 20;
char c = 97;
printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i));
return 0;
}
有人能告诉我当 sizeof(a+b) "a 是 short int 类型 & b 是 char 类型"时会发生什么吗 输出是:2、1、4
最佳答案
因为C的标准integral promotion rules , 表达式的类型 c + i
是int
,所以这就是为什么你得到相当于 sizeof (int)
的原因.
请注意 sizeof
不是函数,只有在命名类型时才需要括号 and to resolve precendence conflicts .你的代码可以这样写:
printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));
最后使用sizeof
自 sizeof
以来有括号结合比 +
更紧密,说 sizeof c + i
将被解析为 (sizeof c) + i
这不是想要的结果。
另请注意,大多数时候它是一个编译时构造,表达式从未被实际计算过。所发生的一切是编译器“假装”对其进行评估,找出表达式的类型,然后为您提供该类型值的大小。实际值永远不需要存在,这有时很整洁。
sizeof
返回值的类型是size_t
,使用 %zu
打印(不是 int
)。
关于c - 这里发生了什么? sizeof(short_int_variable + char_variable),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416227/
#include int main() { short int i = 20; char c = 97; pri
我是一名优秀的程序员,十分优秀!