c - *变量!=0 是什么意思?

标签 c pointers

char *e; 
while(*e!=0)
{
  if(isalnum(*e))
    printf("%c",*e);

  e++;
} 

但是*e是一个指针,对吗? 所以应该打印地址,对吗?

最佳答案

But*e is a pointer right ?

没有。 e 是一个指针。 *e 是它指向的第一个char。当在表达式(而不是类型声明)中用作一元运算符(具有一个操作数的运算符)时,*indirection operator .

What does a *variable !=0 mean?

假设循环实际上是:

while(*e!=0)

...表示当e指向的char!=0时继续循环。 C 字符串以 0 char'\0' 终止(但通常简单地写为 0)。

<小时/>

我应该注意到问题中的循环,除了基本的拼写错误,例如 Char 而不是 charWhile 而不是 while 存在一个主要逻辑错误,即它永远不会更改循环体内 e 的值。这意味着如果它循环一次,它将永远循环;它需要 ++e; 某处。 (e 也从未初始化。)例如:

char *e = /*...something...*/;
while (*e != 0)
{
    if(isalnum(*e)) {
        printf("%c",*e);
    }
    ++e;
}

或者,实际上,这就是 for 的用途:

char *e;
for (e = /*...something...*/; *e != 0; ++e)
{
    if(isalnum(*e)) {
        printf("%c",*e);
    }
}

关于c - *变量!=0 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500403/

相关文章:

c - 骰子程序不工作

c++ - 如何避免 C 和 C++ 中的命名空间冲突

objective-c - 自动引用计数问题 : Passing address of non-local object to __autoreleasing parameter for write-back

C++ std::string* s;回收内存?

更改 char 指针数组中的字符串

在 CLion 中找不到 Conio.h

c - 将 char* 直接传递给 printf

c - 如何在不将其作为 C 函数的返回值的情况下修改 int 指针?

c# - 了解 C++ DLL 使用 union 映射到 C#

c++ - 为 VS 2010 (MSVC 10) 编译的 libcurl 二进制文件