bool数据类型之谜

时间:2011-10-18 09:04:32

标签: c boolean

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

int main()
{
bool a[5]={0,1,0,0,0};
a[1]=3;
printf("\n bool is %d",a[1]);
printf("\n sizeof bool is %d and size of a is %d",sizeof(bool),sizeof(a));

bool b[10];
printf("\n bool is %d",b[1]);

}

此计划的输出

 bool is 1
 sizeof bool is 1 and size of a is 5
 bool is 4

问题:

1&GT; bool存储1位然后为什么sizeof(bool)是1个字节?

2 - ;如果bool有1个字节,那么当我指定[1] = 3时,为什么它会打印1?

3&GT;如果布尔只考虑1&amp; o要存储的值然后为什么b [1]打印值3?

3 个答案:

答案 0 :(得分:14)

1&GT; Bool商店不是1位。没有什么是1位。一切至少是1个字节。 sizeof(bool)是特定于平台的。只有sizeof(char)保证为1。

2 - ;它隐含地将int转换为bool(bool)3 == 1

3&GT;数组b未初始化,它可以具有任何值。你只是在访问一些内存。

答案 1 :(得分:1)

最后一个printf打印4的原因是因为b数组没有初始化,这意味着printf函数只占用了内存中已有的任何值。

答案 2 :(得分:0)

在C中没有真正的布尔类型。如果一个整数为0,则将其解释为false,其他一切为真。尽管bool只需要一个位,但实际上从未使用过,因为大多数架构中最小的可寻址单元是一个字节。使用上面解释的方法,而不是沿着屏蔽一个字节中除了一个比特之外的所有路径。

您使用的是来自C99的stdbool.h,它提供了typedef bool以及宏truefalse。宏分别扩展为0和1,但使源更具描述性。 sizeof是实现定义的,您不能依赖它在不同平台上是相同的。