当我必须编写一个包含多个变量的程序时,这个问题突然出现在我的脑海中,每个变量都存储一个数字的单个数字。让我们说我在main(或其他一些函数)中声明了几个变量:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n_1 = 1;
int n_2 = 2;
int n_3 = 3;
int n_4 = 4;
int n_5 = 5;
/*
More variables
.
.
.
followed by multiple printf()s
*/
exit(EXIT_SUCCESS);
}
假设由于一些不幸的情况,我需要所有这些单独的变量,我不能使用数组或使用不同的,更有效的解决方案。
如果我想打印存储在每个变量中的值,我当然可以通过单独调用printf()
或单次调用printf()
来打印每个变量。但我能否更有效地实现同样的目标。如果有可能在循环中执行此操作,我特别感兴趣。脚本语言中常见的解决方案是使用for
循环中的迭代器变量的值来完成变量的名称,因为名称具有固定的结构,如下所示:
for (int i; i < n; ++i) {
printf("%d\n", n_i);
}
但这显然不适用于C
(我知道为什么所以不需要指出这一点)。那么有经验的人对此有何看法?
答案 0 :(得分:1)
这是使用指针数组执行此操作的一种方法:
#include <stdio.h>
#define countof(A) (sizeof(A) / sizeof(A[0]))
int main(void) {
int n_1 = 1;
int n_2 = 2;
int n_3 = 3;
int n_4 = 4;
int n_5 = 5;
int* vars[] = { &n_1, &n_2, &n_3, &n_4, &n_5 };
for (int v = 0; v < countof(vars); v++) {
printf("%d\n", *vars[v]);
}
return 0;
}
我猜测,您可以为一个给定范围内的所有vars
变量生成n_
的宏,以防止必须输出其初始化程序。
很难想象会阻止你使用直接阵列的情况。你可以用C中的局部变量做任何事情,你也可以使用数组元素,包括获取它的地址:它们都是左值,并且禁止扩展,可以在完全相同的上下文中使用。
答案 1 :(得分:0)
答案是&#34; no&#34;因为程序文本没有被解释,就像脚本语言一样。您可以将变量声明为数组并索引数组以打印变量。
int a[5], i;
....
for (i=0; i<5; i++) printf("%d",a[i]);
printf("\n");