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
}
你可以選擇使用陣列來完成這兩項工作中的任何一項。
- 陣列的長度應該存放在陣列的第一個成員中。
- 將陣列封裝在一個
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
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