[英]Need some explanation for this code
我找到了這個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
以了解它:
返回值成功返回后,這些函數將返回打印的字符數(不包括用於結束輸出到字符串的空字節)。
因此,基本上我們將i
字符串的較小部分printf,直到printf返回6
作為打印的字符數。
這是它打印的內容:
*
**
***
****
*****
要記住的要點:
printf
返回沒有打印的字符 for
循環執行直到條件評估為true 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.