我找到了这个c99代码。有人可以解释一下这里发生了什么吗?
for(char const * i = "*****";printf("%s\n",i + 4) < 6;i--);
答案 0 :(得分:1)
让我剖析一下这句话:
for(char const * i = "*****";printf("%s\n",i + 4) < 6;i--);
for
循环条件的第一部分:char const * i = "*****";
只是指向5个明星字符的指针。 i+1
会指向****
,i+2
会指向***
,依此类推。
第二部分打印给定数量的星星:printf("%s\n",i + 4)
。通常在for
循环的这一部分中,我们使用类似i < n
的内容。在这里,我们得到i
的结果而不是printf
。
看一下man 3 printf
来理解它:
返回值 成功返回后,这些函数返回打印的字符数(不包括用于结束输出到字符串的空字节)。
所以基本上我们打印i
字符串的较小部分,直到printf返回6
作为打印的字符数。
答案 1 :(得分:1)
这是它打印的内容: -
*
**
***
****
*****
要记住的要点: -
printf
不会返回打印的字符for
循环执行直到条件评估为真答案 2 :(得分:1)
md-select
但它可能会崩溃。要打破循环,charsPrinted必须达到6,这意味着This might make it more clear:
char*i = "12345";
int charsPrinted = printf( "%s\n", i + 4 );
while ( charsPrinted < 6 )
{
i--;
charsPrinted = printf( "%s\n", i + 4 );
}
不再指向字符串start。那时它并不真正有效。它可能有用,但这取决于。没有崩溃,就会打印出来:
i