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