关于用不用全局变量的问题。

wwbbqq 2010-01-04 12:35:15
在CU论坛看到这样一个帖子:全局变量和goto一样有害,尤其是对于初学者
有时候必须用全局变量是由于问题的性质或者两害相权取其轻。

我菜鸟不明白,不用全局变量怎么共享全局需要访问的数据?

有个大牛提出以下解决方案:
1,函数参数
2,共享内存
3,XML
4,运行时参数
5,配置文件

除了1之外,都会增加程序复杂度。

我现在想知道如何用(C语言)1.函数参数实现全局变量的作用。
最好有程序实例,谢谢先。
...全文
207 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
drinker_linux 2010-01-05
  • 打赏
  • 举报
回复
好啊
hbvanguard 2010-01-04
  • 打赏
  • 举报
回复


//不用全局变量,用参数传递来变量共享
#include "stdio.h"
#include "stdlib.h"
void fun1(int *p){ *p = 1; }//上贴void写错了
void fun2(int *p){ *p = 2; }
void main()
{
int i = 0;//变量i在各函数之间通过参数传递来共享
fun1(&i);
printf("%d",i);
fun2(&i);
printf("%d",i);
system("pause");
}
kaoyan20102008 2010-01-04
  • 打赏
  • 举报
回复
要看什么时候用了~
swl82560397pq 2010-01-04
  • 打赏
  • 举报
回复
顶,该用就用,虽然站了内存,但实现的代码方便了,各有利弊!
东大坡居士 2010-01-04
  • 打赏
  • 举报
回复
1,函数参数
//全局变量是共享的,用函数参数实现全局变量的作用,意思就是都用参数传递吧.

int main()
{
int a = 0;//假如这个是全局变量的作用
int tmp = func1(a);
func2(tmp);
}
hbvanguard 2010-01-04
  • 打赏
  • 举报
回复

//不用全局变量,用参数传递来变量共享
#include "stdio.h"
#include "stdlib.h"
viod fun1(int *p){ *p = 1; }
void fun2(int *p){ *p = 2; }
void main()
{
int i = 0;//变量i在各函数之间通过参数传递来共享
fun1(&i);
printf("%d",i);
fun2(&i);
printf("%d",i);
system("pause");
}
jernymy 2010-01-04
  • 打赏
  • 举报
回复
swl82560397pq 2010-01-04
  • 打赏
  • 举报
回复
顶,该用就用,虽然站了内存,但实现的代码方便了,各有利弊!
loveisbug 2010-01-04
  • 打赏
  • 举报
回复
确实,需要的时候用。但是不管是什么,都要小心,写程序本来就要小心慎重。
taodm 2010-01-04
  • 打赏
  • 举报
回复
楼主去看《代码大全》,有一章节来讲这个问题的。
alexhilton 2010-01-04
  • 打赏
  • 举报
回复
对于全局变量和GOTO, 不是不要使用, 而是要慎用, 因为它们都容易导致一个变量不知道在什么地方被赋值, 不知道在什么地方被引用。
用函数参数可以实现部分全局变量。
比如, 你可以用一个全局变量, 也可以用参数在函数之间传递:

/× version 1: use global */
static char buffer[ MAX_SIZE ];
int foo1();
int foo2();
int foo3();
/* ... */

/* version 2: pass in args */
int foo1( char *buffer );
int foo2( char *buffer );
int foo3( char *buffer );
csgdseed 2010-01-04
  • 打赏
  • 举报
回复
该用还得用
飞天御剑流 2010-01-04
  • 打赏
  • 举报
回复
1-5都会增加复杂度和开销,也并非说使用全局变量就一定有害,甚至还说到可以跟goto比肩的程度,夸大其词了。

这个问题是没有统一定论的,要视情况而定。
davelv 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 demon__hunter 的回复:]
全局变量和goto的使用是一个哲学问题~~~~
[/Quote]

赞同
traceless 2010-01-04
  • 打赏
  • 举报
回复
能免则免,这个思考的过程就是成长
失落的凡凡 2010-01-04
  • 打赏
  • 举报
回复
一般来说,很少有全局都要访问的变量。如果全局变量很多,那说明很可能程序的设计有问题,不够模块化。
lz3771 2010-01-04
  • 打赏
  • 举报
回复
好啊
机智的呆呆 2010-01-04
  • 打赏
  • 举报
回复
全局变量和goto的使用是一个哲学问题~~~~
wwbbqq 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 macrojj 的回复:]
函数参数的意思就是把全局东西 做成一个管道里传递的东西。用到这个全局变量的函数 都要多加一个形参
[/Quote]

意思是这个意思,就是不知道如果实现,有例程就好了。
macrojj 2010-01-04
  • 打赏
  • 举报
回复
函数参数的意思就是把全局东西 做成一个管道里传递的东西。用到这个全局变量的函数 都要多加一个形参
加载更多回复(8)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧