gpt4 book ai didi

c - 这里发生了什么? sizeof(short_int_variable + char_variable)

转载 作者:太空狗 更新时间:2023-10-29 17:00:57 24 4
gpt4 key购买 nike

#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 + iint ,所以这就是为什么你得到相当于 sizeof (int) 的原因.

请注意 sizeof不是函数,只有在命名类型时才需要括号 and to resolve precendence conflicts .你的代码可以这样写:

printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));

最后使用sizeofsizeof 以来有括号结合比 + 更紧密,说 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com