检查 this obfuscated code在 IOCCC 中。我正在尝试理解这一点。
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
意思是:
int i;
main()
{
for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hello, world!\n",'/'/'/'));
}
read(j,i,p)
{
write(j/p+p,i---j,i/i);
}
请解释一下:i["]<i;++i){--i;}"]
这里如何作为条件语句?
最佳答案
C 索引有点古怪。 a[b]
大致等同于 *(a+b)
(a
降级为指向第一个元素的指针)。但是加法是可交换的,所以 a[b]
和 b[a]
做同样的事情。因此:
i["]<i;++i){--i;}"]
真的只是:
"]<i;++i){--i;}"[i]
但是如果您错过了引号,重新排序会使它看起来像一个正常的 for 循环,从而造成混淆。由于除了 NUL
终止符外,字符串中的所有值都非零(因此为“true”),因此当 i
等于该字符串的长度时,循环将结束字符串文字。
关于c - i ["string"] 如何用作条件语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34303802/