簡體   English   中英

通用C程序

[英]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.

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