gpt4 book ai didi

c - 以下 for 循环的功能有何不同

转载 作者:太空狗 更新时间:2023-10-29 16:01:52 26 4
gpt4 key购买 nike

#include<stdio.h>
void main()
{
int a,b,c;
for(b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,TFy!QJu ROo TNn(ROo)SLq SLq ULo+UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^NBELPeHBFHT}TnALVlBLOFAkHFOuFETpHCStHAUFAgcEAelclcn^r^r\\tZvYxXyT|S~Pn SPm SOn TNn ULo0ULo#ULo-WHq!WFs XDt!"[b+++21];)
{
for(;a-->64;)
{
putchar((++c == 'Z') ? (c = c/9) : (33^b&1));
}
}
getch();
}

以上c语言程序给出了印度 map 的输出。在上面的程序中,for 循环的外部有 2 个槽,第三个留空。但是我了解程序是如何工作的,但怀疑是外部 for 循环的条件槽用作赋值槽。从句法和逻辑上讲,这应该是错误的,但它确实有效。根据数组索引中的值,将对应char的ASCII码赋值给变量a
这是如何工作的?

最佳答案

外层for循环的条件槽将字符串文字中的一个字符赋值给a,同时递增b。因为赋值运算符也返回赋值,所以外层for循环的条件就变成了字符串字面量的部分字符的值。因为字符串在 C 中是 '\0' 分隔的,所以在表达式 b++ + 21 到达字符串末尾(然后是字符串的最后一个(额外)字符)之前条件为真返回字符串,它等于 0,因此评估为 false)

事实上,这是用于迭代字符串的常见 C 惯用语的混淆版本和更复杂的版本,如下所示:

char *string = "my string";
int i;
for (i = 0; string[i]; ++i)
/* do something with string[i] */

可以简化为:

int i = 0;
for (; string[i++]; )
/* do something with string[i] */

此外,当前字符可以提取到一个单独的char变量c:

int i = 0;
char c;
for (; c = string[i++]; )
/* do something with c */

也可以使用 while 循环:

while (c = string[i++])
/* do something with c */

关于c - 以下 for 循环的功能有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20900988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com