2013-04-15 38 views
1

我有點困難,試圖理解什麼爲一個指針設置for循環的測試條件做了什麼,甚至沒有任何設置爲變量值比較。我和我的家庭作業工作的一個代碼示例:將循環的測試條件設置爲指針的功能是什麼

int f (char *s, char *t) { 
    char *p1, *p2; 
    for (p1 = s; *p1; p1++) { 
    for (p2 = t; *p2; p2++) 
     if (*p1==*p2) break; 
    if (*p2 == ‘\0’) break; 
    } 
return p1-s; 
} 

我不是在尋找的功能的說明,更多的只是在兩個for循環的測試條件的解釋。

+0

'* p1'和'* p2'不是指針。 –

回答

3
for (p1 = s; *p1; p1++) { 
    for (p2 = t; *p2; p2++) { 

這相當於比較*p1*p2到NUL(\0)。當到達字符串的NUL終止符時,循環將終止。

for (p1 = s; *p1 != '\0'; p1++) { 
    for (p2 = t; *p2 != '\0'; p2++) { 

可以在ifwhile語句中使用這種簡寫爲好,以及其他類型。退出條件將檢查該變量的默認零值:'\0'(字符),0(整數),0.0f0.0(針對浮點數和雙精度),NULL(針對指針)。

p = malloc(n); 
if (p) { 
    // if p is not null 
} 

int len = strlen(s); 
while (len--) { 
    // loop until len reaches 0 
} 
1

for (p1 = s; *p1; p1++)繼續執行循環while *p1爲真時,即,當在地址p1字符值是非零值,即,當p1不指向一個NUL字節。

+0

+1好答案。這是由於for循環轉換爲彙編的方式 - 查找它user2281043 :) –

+0

謝謝,這就是我認爲它做的,但我想第二個意見 – ntharrison

+1

它沒有任何關係「循環被轉換成彙編「,這是如何定義語言的問題。 –

-1

在外部環路中的每個字符:

for (p1 = s; *p1; p1++) { 
} 

使用指針運算測試字符每個字符靠在內環,並且如果存在匹配,則暫停字

for (p2 = t; *p2; p2++) 
    if (*p1==*p2) break; 

完或者對於內部循環爲NULL,則從循環中斷開也是

if (*p2 == ‘\0’) break;