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