有人能告诉我以下两个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;
}
答案 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)
在小型程序中使用全局变量是可以的,但是在大型程序中使用全局变量会使事情变得复杂。
话虽如此,只有在没有其他选择时,才应使用它们。