为什么总是得到相同的布尔值?

时间:2013-11-09 15:56:16

标签: c++ boolean

#include<stdio.h>
#include<stdlib.h>

int main ( void )
{
     bool* Str_A = (bool*)calloc(1024,1);
     bool* Str_B = (bool*)calloc(1024,1);
     *Str_A = true;
     *Str_B = true;
     *(Str_A+2) = *Str_A+*Str_B;
     printf("%s", (Str_A+2)?"true":"false");
}

我是否将*Str_A或/和*Str_B更改为false,它始终打印true。 为什么呢?

2 个答案:

答案 0 :(得分:2)

在表达式(Str_A+2)?"true":"false"中,Str_A+2是一个指针,因为它不是空指针,而是转换为true

答案 1 :(得分:2)

这一行:

printf("%s", (Str_A+2)?"true":"false");

如果true加2的地址非零,则打印Str_A。你想要检查的是Str_A加2的内容是否非零,所以你应该写:

printf("%s", *(Str_A+2)?"true":"false");

或者我更喜欢:

printf("%s", Str_A[2]?"true":"false");