“按引用调用”和全局变量之间的区别

时间:2019-05-16 08:07:47

标签: c global-variables

有人能告诉我以下两个C代码段的优缺点吗?我有一个int x,我需要从几个函数中进行访问。最好将它用作参考参数(代码段1)或用作全局变量(代码段2)?

第一段:

struct A {
    int x;
};

void init( struct A * a ) { 
    a->x = 0;
}

void incx( struct A * a ) {
    a->x++;
}

int main(void) {
  struct A a;
  init(&a);
  incx(&a);
  return 0;
}

第二个片段:

int x;

void init() {   
    x = 0;
}

void incx() {
    x++;
}

int main(void) {
  init();
  incx();
  return 0;
}

2 个答案:

答案 0 :(得分:1)

传递对象引用时,您可以更改所需的任何对象,并且该功能是通用的。

int inc(int *v)
{
    return ++(*v);
}

int v;

void foo()
{
    int x;
    int *y = malloc(sizeof(*y));

    struct 
    {
        int x;
        int y;
    }z;

    inc(&x);
    inc(y);
    inc(&z.y);
    inc(&v);
}

答案 1 :(得分:-1)

在小型程序中使用全局变量是可以的,但是在大型程序中使用全局变量会使事情变得复杂。

话虽如此,只有在没有其他选择时,才应使用它们。