Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么当我写“while”时,while循环工作&引用;在这种情况下_C_String_While Loop - Fatal编程技术网

C 为什么当我写“while”时,while循环工作&引用;在这种情况下

C 为什么当我写“while”时,while循环工作&引用;在这种情况下,c,string,while-loop,C,String,While Loop,为什么这段代码的输出趋于无穷大。输出为qwertyqwertyqwerty #include <stdio.h> int main() { while(" ") { printf("qwerty"); } return 0; } #包括 int main() { 而(“”) { printf(“qwerty”); } 返回0; } 即使而(“”将是一个无限循环。在C语言中,所有字符串文本都被隐

为什么这段代码的输出趋于无穷大。输出为qwertyqwertyqwerty

#include <stdio.h>

int main()
{
    while(" ")
    {
        printf("qwerty");
    }
    return 0;
}
#包括
int main()
{
而(“”)
{
printf(“qwerty”);
}
返回0;
}
即使
而(“”
将是一个无限循环。在C语言中,所有字符串文本都被隐式地视为指向字符串常量的指针<代码>“将是内存中某个位置的数据的一个字节部分(隐式的
\0
终止符本身),如果对其求值,就会得到它的地址

的解释取决于您使用的语言。特别是因为许多语言(包括JavaScript、Perl、PHP、Python)在条件子句中提供了隐式转换,并且其中许多语言对
的处理方式也不同。其他语言如C#、Java和Delphi不提供隐式对话

C(因此也是C++)生成一个字符串文字,它被认为是
constchar*
(指向常量数据的指针)类型。在条件子句中求值时,表达式始终为true。阅读更多:和


“Pro Tip”:对于进一步使用表达式的实验,请考虑<代码>如果而不是<代码> < < /C> >

< P>一个字符串文字,如<代码>“< /C> >,代表一个字符数组(C 2018 64.5 6)。这个包含一个空格和一个空字符

while(“”
)中使用时,此数组将自动转换为指向其第一个元素的指针(C 2018 6.3.2.1 3)。(每当在表达式中使用数组时,就会发生此转换,但作为
sizeof
的操作数、一元
&
的操作数或用于初始化数组的字符串文字除外。)

while
语句迭代,直到其控制表达式比较等于0(C 2018 6.8.5.1 4)

指针比较等于零,仅当它是空指针时才有效地表示为空指针(C 2018 6.5.9 6)


由于字符串文字产生的指针指向初始空格字符,因此它不是空指针,并且它的比较值从不等于零。因此循环将永远迭代。

因为
是一个非空指针。与
相同,而(1)
。你期望什么?你期望它循环多少次?您使用的是一个常量值,所以它不是零就是无限。这是一个指针,它的(“”)值是什么?任何字符串文字都将衰减为指向其位置的指针,正如所说,它不会为
NULL
。字符串的内容不相关。如果要查看值,请使用
printf(“%p”,”)
这也适用,而(main)也会导致infinity@Prince除了下面的注释之外,另一个答案是:如果在表达式中使用函数名而不调用它(即,在它后面没有括号),函数的地址被作为值,由于现有函数的地址不同,所以它总是被视为true。这在(main)时也起作用,这也导致infinity@Prince:
main
是一个函数指示符。函数指示符自动转换为函数指针,因此
main
变为
&main
。仅当指针为空指针时,将指针与零进行比较计算结果为真
&main
不是空指针。@Wolf:我引用的官方版本除了通过付款之外不能在网上获得(并且当时无法链接),我不希望将引用链接到官方版本到非官方草稿。@Wolf:我不希望将引用链接到官方版本到非官方草稿。我以前说过这一观点,不明白你为什么再次要求它。