2013-11-09 5 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"); 
} 

ли изменить I *Str_A или/и *Str_B в false или нет, он всегда печатать true. Почему?Почему всегда получается то же логическое значение?

+3

Кто говорит 'SizeOf (BOOL) 'окончательно 1? – chris

+0

Я протестировал минуту назад, действительно, 'sizeof (bool)' is 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.

Смежные вопросы