#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
。
为什么呢?
答案 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");