2013-11-09 36 views
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。 为什么?为什么总是得到相同的布尔值?

+3

谁说'的sizeof(布尔) '肯定是1? – chris

+0

我测试了一分钟前,真的,'sizeof(bool)'是1 – user2967915

+1

你应该检查'*(Str_A + 2)?“true”:“false”',但仍然总是'true'。 –

回答

2

这条线:

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

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

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

否则我宁愿:

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

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

相关问题