在C语言中,你不能'更改循环变量的名称'但循环变量不必在编译时确定为单个变量。
例如,在 C 语言中没有理由不能这样做:
int i[10];
int j;
j = /* something */;
for (i[j] = 0 ; i[j] < 123 ; i[j]++)
{
...
}
或事件提供一个指针
void
somefunc f(int *i)
{
for (*i = 0; *i<10; *i++)
{
...
}
}
并不明显why你想这样做,这意味着很难发布更有用的示例,但这里有一个示例,它使用递归来迭代可定义的深度级别数,并将所有计数器变量传递给最里面的函数:
void
recurse (int levels, int level, int max, int *counters)
{
if (level < levels)
{
for (counters[level] = 0;
counters[level] < max;
counters[level]++)
{
recurse (levels, level+1, max, counters);
}
return;
}
/* compute something using counters[0] .. counters[levels-1] */
/* each of which will have a value 0 .. max */
}
另请注意,在 C 中,实际上不存在循环变量之类的东西。在一个for
声明,形式为:
for ( A ; B ; C ) BODY
表达A
一开始就被评估一次。表达B
在每次执行之前评估BODY
并且循环语句将终止(并且不执行BODY
) 如果其计算结果为 0。 表达式C
每次执行后都会评估BODY
。所以如果你愿意的话你可以写:
int a;
int b = /* something */;
int c = /* something */;
for ( a=0; b<5 ; c++ ) { ... }
尽管这通常不是一个好主意。