2014-09-06 193 views
0

假設我有一個字符串「str」。 我的for循環如下:條件檢查for循環在C

for(i=0;i<strlen(str);i++){ 

    //do stuff 

} 

問題:當條件被選中,我<的strlen(STR),是的strlen(STR)部分每次循環運行計算的?或者它被存儲並且僅在第一次計算?

回答

5

循環中的條件表達式將在每次迭代時得到評估 - 它就是這樣,直到(理想情況下)表達式變爲false。所以是的:strlen(str)將被重複計算。如果字符串根本沒有改變,將其長度存儲在局部變量中會更好。

int n = strlen(str); 
for (i=0; i<n; i++) { 
    // do stuff 
} 

這也將工作:

for (i=0; str[i] != '\0'; i++) { 
    // do stuff 
} 
+0

的是,在大部分我見過他們使用strlen條件在for循環的所有節目的網站。所以我們應該使用變量來做到這一點,對吧?它應該會有更好的表現,儘管非常輕微。 – 2014-09-06 04:53:21

+1

@guitar_geek看看這篇[文章](http://www.cprogramming.com/tips/tip/dont-use-strlen-in-a-loop-condition),它將我的觀點帶回家。 – 2014-09-06 04:54:41

+2

如果大多數網站確實是這樣的情況,這隻能證明大多數網站都是不好的信息來源。 – 2014-09-06 05:00:05