char中的char *和boolean TRUE FALSE

时间:2013-10-10 07:09:27

标签: c char boolean char-pointer

我有一段遗留代码,它有char*个函数参数,用于if-then-else逻辑流程。例如:

void myFunc(char *f_reset) {

     .....
     .....
     if(*f_reset) {// do this;}
     else {// do that;}

}

假设我从myFunc(char *f_reset)

致电main()
 void main(void) {
     char r = 0;
     char *f_reset = &r;

     *f_reset = 0;

     myFunc(f_reset);  // Debug and enter this function

  }

当我尝试进入函数调用时,我发现*f_reset永远不会被评估为0,即为false - 它总是正确的,因为有些垃圾-8342345825或类似的东西

它使用char*的原因可能是因为在过去,boolean占用的内存多于char *?我在Stackoverflow帖子中读过的一些东西。

有人可以给我一个关于char*和逻辑真假的关系的假指南吗?

3 个答案:

答案 0 :(得分:1)

C 中,没有布尔类型。 if statment evaluete只有intergers,所以整数值0为false,其他任何都是true。 char类型可以用作8位整数。

char值:

char var = '0';

对应于整数值48(参见ASCII table)而不是整数值0。

在您的示例中,您有一个char指针。但是在你的if语句中你不是在评估指针,而是它的值;所以,* f_reset必须是0(整数)才能被评估为false。

char var = 0;

...
myFunc(&var);
...

答案 1 :(得分:0)

#include<stdio.h> 
#define TRUE 1
#define FALSE 0
void myFunc(char *);
int main()
{
char r = FALSE;
char *f_reset = &r;



myFunc(f_reset);  // Debug and enter this function

}

void myFunc(char *f_reset)

{
if(*f_reset)
printf("true");
else
printf("false");

}

答案 2 :(得分:-1)

#include<stdio.h>
int main()
{
char *x;
char a=0;
x=&a;

if(*x)
printf("true");
else
printf("false");

return 0;
}