簡體   English   中英

需要一些代碼解釋

[英]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
  • 我被初始化為const字符串的最后一個開始,並且每次迭代向左移動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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM