C 語言中的 foreach 迴圈

Muhammad Zeeshan 2023年1月30日 2022年7月18日
  1. 程式語言中的迴圈
  2. C 語言中的 for-each 迴圈
  3. 使用巨集在 C 語言中實現 for-each 迴圈
C 語言中的 foreach 迴圈

下面的內容將研究 C 語言是否支援 for-each 迴圈。首先,我們必須準確地知道什麼是迴圈。

程式語言中的迴圈

程式語言中的語句或單詞集合的執行可以迴圈執行多次,重複次數由條件評估的結論確定。必須滿足後續條件才能在迴圈內執行語句。

可以在 for-each 迴圈的幫助下完成對集合元件的迭代。集合可以是列表或陣列。

它對陣列的每個元素執行其操作。

C 語言中的 for-each 迴圈

C 不支援 for-each 構造,因此無法實現。當使用點表示法解析陣列時,接收方不知道陣列有多長。

因此,無法確定何時到達陣列的末尾。請記住,C 語言中的 int* 變數是指向記憶體中包含 int 的位置的指標。

沒有頭物件有關於按順序排列的數字數量的資訊,這是因為沒有。因此,程式設計師必須跟蹤這一點。

另一方面,在使用列表時建立類似於 for-each 迴圈的功能很簡單。

for(Node* node = head; node; node = node.next) {
   //Your logic will be here
}

你可以選擇使用陣列來完成這兩項工作中的任何一項。

  1. 陣列的長度應該存放在陣列的第一個成員中。
  2. 將陣列封裝在一個 struct 中,該結構儲存其長度和對陣列本身的引用。

以下示例中顯示了一種這樣的結構。

typedef struct job_t
{
 int countvariable;
 int* arr;
}
arr_t;

使用巨集在 C 語言中實現 for-each 迴圈

此外,我們可以利用巨集來簡化程式碼,使其更易於理解和編寫。對於某些資料結構,我們可以構建巨集來實現 C 語言中的 for-each 結構。

為了更好地理解這個概念,讓我們看一下下面的例子。

#include <stdio.h>

int main() {
#define FOREACH(item, arr, start, size)\
  for(int i = start, keep = 1;\
    keep && i < size;\
    keep = !keep, i++)\
  for (item = arr[i]; keep; keep = !keep)

int arr[] = { 3, 9, 7, 1, 8 };
FOREACH(int z, arr, 3, 7)
 printf("Shanii Demo index: %d. element: %d\n", i, z);
}

你現在可以定義 start 索引和 size 以便它適用於衰減陣列指標。不需要 int* 並且 count!= size 已更改為 i<size 以防使用者無意中將 i 更改為大於 size, 這將導致他們陷入困境一個無限迴圈。

輸出:

Shanii Demo index: 3. element: 1
Shanii Demo index: 4. element: 8
Shanii Demo index: 5. element: 32766
Shanii Demo index: 6. element: -1762484992
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn