#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?
答案 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
以及宏true
和false
。宏分别扩展为0和1,但使源更具描述性。 sizeof
是实现定义的,您不能依赖它在不同平台上是相同的。