[英]General C program
下面的代碼;
typedef struct chainCell{
int data;
struct chainCell* next;
} chainCell;
bool sameValues (chainCell *x, chainCell *y)
{
if ((x == NULL) & (y == NULL)) return true;
if ((x == NULL) | (y == NULL)) return false;
bool same = true;
chainCell *xp = x, *yp = y; // scan pointers
while ((xp != NULL) & (same == true)) // point A
{
if (xp->data != yp->data) same = false;
xp = xp->next;
yp = yp->next;
if (((xp == NULL) & (yp != NULL)) // point B
| ((xp != NULL) & (yp == NULL)))
same = false;
};
return same;
};
我對為什么循環控件包含(same == true)
感到非常困惑?
另外,B點的if語句的目的是什么? 我不確定布爾表達式要檢查什么?
任何進一步了解的幫助將不勝感激!
它檢查兩個鏈接列表是否包含相同的值。
顯然,如果一個列表較短,則它們是不相同的(B點)。
注意:我認為在這里使用break
/ return
是更好的選擇,它使代碼更具可讀性。
注2:如注釋中所述,這些應該是邏輯運算符。 它按原樣工作,但是有點令人困惑。
注意3:您可以將測試移到循環內的循環之前( while(1)
),這樣就無需在循環結束時進行測試。
這只是一個丑陋的代碼,應該是大約5行代碼,而不是十幾行...
bool sameValues (chainCell *x, chainCell *y)
{
while(1) {
if (!x && !y) return true;
if (!x || !y) return false;
if (x->data != y->data) return false;
x = x->next;
y = y->next;
}
return false; //this is just to suppress compiler warning.
};
函數bool sameValues (chainCell *x, chainCell *y)
檢查兩個struct chainCell是否具有相同的值,也就是說,x和y之間的chainCell類型的每個字段都相等。
“為什么循環控件包含(相同== true)?”
布爾值same指示先前檢查的字段是否相等。 如果same == false
,則得出結論x和y的值不相同,並且while循環可能會中斷。
B點的if語句的目的是什么?
if語句設置兩個字段可以相等的條件,僅當兩個字段均為null或都不為null時。
@Karoly Horvath的答案的緊湊形式:
bool sameValues (chainCell *x, chainCell *y)
{
for( ; x || y; x = x->next, y = y->next) {
if (!x || !y) return false;
if (x->data != y->data) return false;
}
return true;
}
據我了解,代碼是一個循環,用於檢查兩個chainCell
對象是否相同。
(same == true)如果在cellChains中找到一個不匹配的位置,則會導致while循環退出。
點B正在檢查是否要比較的chainCells中的任何一個為null,而另一個不為null,則比較返回false。
退出循環可能是由於xp到達空值所致。
我也同意Shafiks的評論,運算符是按位的,應該合乎邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.