需要对此代码进行一些解释

时间:2017-05-25 18:01:59

标签: c string c99

我找到了这个c99代码。有人可以解释一下这里发生了什么吗?

for(char const * i = "*****";printf("%s\n",i + 4) < 6;i--);

3 个答案:

答案 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循环执行直到条件评估为真
  • i初始化为const字符串中的最后一个开始,并且每次迭代向左移动1个星

答案 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