在C语言中,并没有像Python那样的内置 range() 函数,C语言中的循环通常使用 for 循环配合索引来实现类似 range() 的功能,以下是几种常见的替代方法:

(图片来源网络,侵删)
基本 for 循环(最常见)
通过初始化、条件和递增/递减来模拟 range() 的行为:
#include <stdio.h>
int main() {
// 模拟 range(5) → 0, 1, 2, 3, 4
for (int i = 0; i < 5; i++) {
printf("%d ", i);
}
// 输出: 0 1 2 3 4
// 模拟 range(2, 7) → 2, 3, 4, 5, 6
printf("\n");
for (int i = 2; i < 7; i++) {
printf("%d ", i);
}
// 输出: 2 3 4 5 6
return 0;
}
自定义 range 函数(模拟Python风格)
如果希望更接近Python的 range()(如支持步长),可以封装一个函数:
#include <stdio.h>
// 打印从start到end(不包含),步长为step的序列
void range(int start, int end, int step) {
for (int i = start; i < end; i += step) {
printf("%d ", i);
}
}
int main() {
// range(0, 5, 1) → 0 1 2 3 4
range(0, 5, 1);
printf("\n");
// range(10, 0, -2) → 10 8 6 4 2
range(10, 0, -2);
printf("\n");
return 0;
}
使用宏定义(编译时展开)
如果希望完全避免函数调用开销,可以用宏定义:
#include <stdio.h>
// 定义宏:RANGE(start, end, step)
#define RANGE(start, end, step) \
for (int i = (start); i < (end); i += (step))
int main() {
// RANGE(0, 5, 1) → 0 1 2 3 4
RANGE(0, 5, 1) {
printf("%d ", i);
}
printf("\n");
return 0;
}
动态生成范围(动态内存分配)
如果需要将范围存储在数组中(类似Python的 list(range())):

(图片来源网络,侵删)
#include <stdio.h>
#include <stdlib.h>
int* create_range(int start, int end, int step, int* size) {
*size = (end - start) / step;
if (*size <= 0) return NULL;
int* arr = malloc(*size * sizeof(int));
for (int i = 0; i < *size; i++) {
arr[i] = start + i * step;
}
return arr;
}
int main() {
int size;
int* range = create_range(0, 10, 2, &size); // 0, 2, 4, 6, 8
for (int i = 0; i < size; i++) {
printf("%d ", range[i]);
}
// 输出: 0 2 4 6 8
free(range);
return 0;
}
| 需求 | 推荐方法 | 特点 |
|---|---|---|
| 简单循环 | 基本 for 循环 |
最直接,无需额外代码 |
模拟Python range() |
自定义函数或宏 | 支持步长,更灵活 |
| 存储范围到数组 | 动态内存分配 | 可复用数据,但需手动释放内存 |
根据实际需求选择合适的方式,对于大多数场景,基本 for 循环 已经足够。

(图片来源网络,侵删)
