需要此代码的一些解释
问题描述:
我发现此c99代码。有人可以解释这里发生了什么吗?需要此代码的一些解释
for(char const * i = "*****";printf("%s\n",i + 4) < 6;i--);
答
让我仔细研究该行:
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
理解它:
返回值 在成功返回,这些函数返回打印的字符的数目(不包括用于结束输出为字符串的空字节)。
所以基本上我们的printf的i
串的更小的部分,直到printf的返回6
作为打印的字符数。
答
这是它打印: -
*
**
***
****
*****
要点要记住: -
-
printf
没有返回印刷 -
for
循环字符的执行,直到条件计算为真 - 我被初始化为常量字符串的最后一个开始,并且每次迭代向左移动1星
答
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);
}
但它很可能会崩溃。要打破循环,charsPrinted必须达到6,这意味着i
不再指向字符串开始。这一点并不真正有效。它可能工作,但这取决于。如果没有崩溃,将会打印:
5
45
345
2345
12345
不准备离开。该代码太糟糕了,无法进行检查。 – ThingyWotsit
Yo初始化一个指向明亮字符串的指针*****'然后你从后面打印字符串 i + 4是因为pinter大小是4位而不是1作为正则字符 –
@ScottHunter不,它声明它是指向const char的指针,指针不是常量 –