我有一小段关于sizeof运算符和三元运算符的代码:

#include <stdio.h>
#include <stdbool.h>

int main()
{
    bool a = true;
    printf("%zu\n", sizeof(bool));  // Ok
    printf("%zu\n", sizeof(a));     // Ok
    printf("%zu\n", sizeof(a ? true : false)); // Why 4?
    return 0;
}

Output (100):

1
1
4 // Why 4?

但在这里,

printf("%zu\n", sizeof(a ? true : false)); // Why 4?

三值运算符返回boolean类型,sizeof bool类型在C中为1字节.

然后why does 100 give an output of four bytes?

推荐答案

因为你有#include <stdbool.h>个.标题defines macrostruefalse分别是10,所以你的陈述如下:

printf("%zu\n", sizeof(a ? 1 : 0)); // Why 4?

在你的平台上,sizeof(int)等于4.

C++相关问答推荐

InetPton()函数无效的IP地址

什么C代码将确定打开的套接字正在使用的网络适配器?

为什么在C中设置文件的位置并写入文件,填充空字符?

来自stdarg.h的c中的va_args无法正常工作<>

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

在C23中使用_GENERIC实现带有右值的IS_POINTER(P)?

当我更改编译优化时,相同的C代码以不同的方式运行

非常大的数组的大小

在循环中复制与删除相同条件代码的性能

对重叠字符串使用MemMove

如何使用FSeek和文件流指针在C中查找文件的前一个元素和前一个减go 一个元素

将变量或参数打包到 struct /联合中是否会带来意想不到的性能损失?

将回调/基于事件的C API转换为非回调API

不使用任何预定义的C函数进行逐位运算

无法识别C编程语言的语法,如书中所示

计算时出现奇怪的计算错误;N Select K;在C中

C 语言中 CORDIC 对数的问题

为什么 C 字符串并不总是等同于字符数组?

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?

将帧从相机 (/dev/video0) 复制到帧缓冲区 (/dev/fb0) 会产生意外结果