遍历 C 中的字符数组

Iterate through an array of characters in C

最近我在下面的示例中看到了 C 中的 while 循环条件,但我不知道 while 条件的真正含义以及编译器如何知道它何时完成。有人可以给我解释一下吗?

这就是我认为的意思:while 循环遍历 char 数组直到数组结束,因为没有其他内容然后 while 循环结束,或者我错了?我尝试使用相同的 while 循环,但是在另一种语言(例如 Go)中,编译器抛出了一个错误,说我不能使用非布尔值。

// C program to demonstrate 
// example of tolower() function. 

#include <ctype.h> 
#include <stdio.h> 

int main() 
{ 
    int j = 0; 
    char str[] = "GEEKSFORGEEKS\n"; 

    // Character to be converted to lowercase 
    char ch = 'G'; 

    // convert ch to lowercase using toLower() 
    char ch; 

    while (str[j]) { // <- this part, how is this a condition?
        ch = str[j]; 

        // convert ch to lowercase using toLower() 
        putchar(tolower(ch)); 

        j++; 
    } 

    return 0; 
} 

while 循环可以理解为 "while this string has characters" 并且在 C 字符串或字符数组中包含一个 '\0' => Null 字符,最后,一旦 while 循环实现它,它将停止迭代。

是的!你是对的。

你可以把一个字符数组想象成下面这样:

所以你在图片中看到一个字符数组已经是一个指针,每个字符都有一个地址,指针的地址就是第一个元素的地址,所以当你声明

char str[] = "GEEKSFORGEEKS\n"; 

它被分配在如下内存中:

[G][E][E][K][S][F][O][R][G][E][E][K][S][\n][[=11=]]

程序将崩溃,因为您重新声明了 ch 变量,而且不需要初始化 char ch = 'G';,因为您在while 循环,它需要 str[j],所以你开始在 j = 0 迭代,这是数组中的第一个索引 [G] ,随着你递增,循环将一直进行到空字符 [\0] 并停止,因为在 NULL 之后没有迭代,在其他情况下例如,您可能会在循环中看到以下条件:while(str[j] != '[=14=]') 这与您的条件相似,但更具体。

您可以通过像下面这样遍历指针来获得更高的性能:

#include <ctype.h> 
#include <stdio.h> 

int main() 
{
    char *str = "GEEKSFORGEEKS\n";

    while (*str)
        putchar(tolower(*str++));

    return 0; 
}

虽然,你得到了答案。不过,我想在这里添加更多细节或解释性答案。

In C, a conditional statement will have either the value 1 or 0. In the end, they all are evaluated to Boolean values true or false or 1 or 0.

所以首先,尝试理解或干燥 运行 那个 while(str[j])。猜猜当 j = 0 时 str[j] 的值是多少。它将是第一个字符 "G"。同样,在下一次迭代中,您将获得下一个字符,直到 NULL 字符或 String Termination 字符。现在,while(str[j]) 中那些括号之间的任何内容都将被视为条件语句,并且它们都被评估为 1 或 0。现在无论如何,如果该条件语句未被专门评估为 0,那么它应该具有 1 的值。 因此,此处 str[j] when j = 0 将被评估为 1,然后是下一个字符,依此类推。现在,当我们找到 [=16=] 时,它是 escape character 等同于 0。因此,在 [=16=] while 循环将终止,因为条件将为假。

Can, you tell me what will be the output of this program?

#include<stdio.h>

int main()
{
    if(printf("Hello TraineeGuy\n"))
        printf("TRUE");
    else
        printf("FALSE");
    return 0;
}