1
#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_Bfalse它总是打印true。为什么?

4

2 回答 2

2

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

于 2013-11-09T16:00:38.590 回答
2

这一行:

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

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

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

或者我更喜欢:

printf("%s", Str_A[2]?"true":"false");
于 2013-11-09T16:04:06.753 回答