访问变量值而不在函数原型中声明它

Accessing variable value without declaring it in function prototype

在函数 read 中,我需要从 main 函数访问整数 a 和整数 b 的值,而无需在函数的原型中声明它们函数 read,使用指针。 指针 x 应指向整数 a,指针 y 应指向整数 b.

#include <stdio.h>
void read(int zzz[], int n) {
    int *arr = zzz, *x=a,*y=b;
}
int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    return 0;
}

如何实现?

read函数可以通过两种方式读取ab的值或地址:

  • 将它们作为参数传递
  • 使 ab 成为全球

所以如果你不想让它们成为参数,你需要将它们移到 main 函数之外和 read 函数之前。

另外,read是一个系统函数的名字,所以你应该给它取个别的名字,以免与它冲突。


您已经收到了更常规的答案。对于您给定的限制,这是最合乎逻辑的选择。


但是 ...愚蠢的人为限制有时需要一个愚蠢的人为解决方案。

一种不太传统的方法是让函数理解值将以某种 non-standard 方式与数组指针一起传递。

例如,您可以创建两个额外的数组成员来表示 ab

int array_for_my_read[array_size + 2];
/* instead of a and b, you use those extra array members */
...
int *x = zzz + n, *y = x + 1;

或者,您可以创建一个特殊的结构来保存数组和指针。然后函数从数组指针中恢复指向结构的指针。

struct extra_parameters {
    int *a;
    int *b;
    int zzz[zzz_size];
};
...
struct extra_parameters x;
int a, b;
x.a = &a;
x.b = &b;
read(x.zzz, zzz_size);
...
void *p = (char *)zzz - offsetof(struct extra_parameters, zzz);
struct extra_parameters *xp = p;
int *a = xp->a, *b = xp->b;