c语言,关于全局变量。
- 提问者网友:几叶到寒
- 2021-07-30 14:50
int num;
main()
{
int n=5;
add(n);
printf("%d 111\n",num);
system("pause");
}
void add(num)
{
num++;
printf("%d 222\n",num);
}
一个教程上说main()下的输出num值是6,add()下输入的num值也是6.
但是我自己在devc编译main()的num值输出之后却是0。 为什么呢,是我代码有问题吗?
- 五星知识达人网友:天凉才是好个秋
- 2021-07-30 15:11
定义全局变量的时候, 是会赋初值0的。。而且它具有全程作用域,适用于定义后的全部函数中。。
但是当全局变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用,如果要想用全局的那个变量的话,要使用作用域分辨符 ::
,
你的那个例子中,main函数中的num就是全局变量的num, 所以输出的是0;
add函数中(应该是void add(int num)吧??),形参中产生与全局变量同名的局部变量num,main函数传过去的实参为 5,num++,得num为6,所以输出是6....
值得一提的是。。。局部变量的值并不会改变全局变量的值。。因为虽然它们是同名···但它们却不是同一个变量··因为他们不会同时出现····
- 1楼网友:十年萤火照君眠
- 2021-07-30 17:37
答案是6,0吧!首先,程序开始都是从main函数进入的,进行到add(n)这句时,跳进add函数,该函数里,num是局部变量,它的值为add(n)里的n的值5传入,n,m一个实参,一个形参,m=5,所以num++后,add函数内的num值为6,下一条语句打印的num为全局变量,因为没赋初值,所以默认值为0,故输出直接是0.所以,最后的结果应该是
6 222
0
int num没贼初值吧
如 int num;
好久没接触C语言了 不知道对不对
刚把程序改成winform 应用程序
运行结果是 6 222 和 0
非专业回答,如有错误,请联系本人删除或修改:
形参与实参数据是单向传递,实参·数据传给形参。就是说,add执行时为num分配了新内存,在新内存内,num++,但在add执行结束后,分配的内存立刻被释放,num++没有传递给任何一个变量,所以main函数中的num为初始值。
void add(int); int num; main() { int n=5; add(n); printf("%d
- 2楼网友:痴妹与他
- 2021-07-30 17:17
...
void add(num)跟int num; void add(num)中的num是参数,num++;只对形参进行自加,并不改变原值n;你的全局变量跟形参一样,所以add中自加的是形参,而不是全局变量(尽量不要让全局参数跟形参名一样)。
main() { int n=5; add(n); printf("main:n=%d\n",n); printf("main:num=%d\n",num); system("pause"); }
void add(temp) { temp++; printf("add:num=%d\n",num); printf("add:temp=%d\n",temp); }
- 3楼网友:酒安江南
- 2021-07-30 16:29
void add(int num) { num++; printf("%d 222\n",num); }
函数add中的num为局部变量,当全局变量和局部变量重名时,全局变量不可见,所以add函数没有改变全局变量的值,至于main中输出num的值为0,可能全局变量定义后,正好它地址里的值为0
要使全局变量在add中可见
可见
void add(int num)
改为void add(int other)即可