c - 高效地打印多个变量的值

标签 c loops

当我不得不编写一个包含多个变量的程序时,这个问题突然出现在我的脑海中,每个变量存储一个数字的一​​位。假设我在 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 中显然不起作用(我知道为什么不需要指出这一点)。那么有经验的人对此有何看法?

最佳答案

这是使用指针数组执行此操作的一种方法:

#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;
}

我想,您可以破解一个为给定范围内的所有 n_ 变量生成 vars 的宏,以避免必须输入其初始化程序。

虽然很难想象会阻止您使用直接数组的情况。在 C 语言中,您可以对局部变量执行任何操作,也可以对数组元素执行任何操作,包括获取其地址:它们都是左值,并且除了扩展之外,可以在完全相同的上下文中使用。

关于c - 高效地打印多个变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30736746/

相关文章:

java - 迭代器中的 NullPointerException

c - c 中的 scanf 和关系输入缓冲区

c++ - OpenCV - 让 slider 在视频播放期间更新其位置

c++ - 如何在 Linux 系统上以编程方式清除 C++ 中的文件系统内存缓存?

C 传递 ‘fread’ 的参数 1 从整数生成指针而不进行强制转换

c++ - 二维 vector 打印

java - 为什么我的 paintComponent() 方法没有被调用?

c - 内联函数,指向变量的指针

LINUX awk 循环遍历 txt 文件的几行

c++ - C++ 中整数循环和迭代器循环之间的差异