-1

我有一段遗留代码,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错误 - 因为一些垃圾-8342345825或类似的东西,它总是正确的。

它使用的原因char*可能是因为在过去 boolean 比 char * 占用更多的内存?我过去在 Stackoverflow 帖子中读到的一些内容。

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

4

3 回答 3

1

C中没有布尔类型。语句evalueteif仅整数,因此整数值 0 为假,其他任何值均为真。该char类型可以用作 8 位整数。

字符值:

char var = '0';

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

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

char var = 0;

...
myFunc(&var);
...
于 2013-10-10T07:34:23.277 回答
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");

}
于 2013-10-10T09:14:03.837 回答
-1
#include<stdio.h>
int main()
{
char *x;
char a=0;
x=&a;

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

return 0;
}
于 2013-10-10T07:33:23.543 回答