| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1636 人关注过本帖
标题:全局变量和局部变量
只看楼主 加入收藏
苏护苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-5-4
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:7 
全局变量和局部变量
#include <stdio.h>

int main ()
{
 int fun ();
 int a=5,b=7;
 fun ();
 printf("%d,%d\n",a,b);

return 0;
}
int  fun ()
{ int a,b;
  a=100;
  b=200;
return a,b;
}
运行结果是5,7.
#include <stdio.h>
int a,b;
int main ()
{
void fun ();
 int a=5,b=7;
 fun ();
 printf("%d,%d\n",a,b);

return 0;
}
void  fun ()
{
  a=100;
  b=200;

}
这个结果也是5,7
想问原因是不是局部变量屏蔽全局变量
如果是那这两个函数里的a,b指得是不是同一个地址。
本人是新手不会调试,所以问问大神!!!
搜索更多相关主题的帖子: return include 
2017-05-16 22:23
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:3 
你修改的都是局部变量,全局变量根本没使用

[此贴子已经被作者于2017-5-16 22:35编辑过]

2017-05-16 22:34
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:3 
程序代码:
#include <stdio.h>
int a,b;
int main ()
{
void fun ();

 int a=5,b=7;//把这行去掉,就能打印出100,200了
 fun ();

 printf("%d,%d\n",a,b);
return 0;
}
void  fun ()
{ 
  a=100;
  b=200;

}


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-16 22:35
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:3 
第一个程序,虽然有返回值,但是没有接收返回值,而且返回值只能有一个,后面的那个返回值就是冗杂部分(想错了,应该冗杂部分是前面那个返回值,程序是从右往左运行)。所以你操作的就是主函数的变量a,b。
第二个程序虽然全局变量a,b,他的作用域在整个文件。你如果没有定义其它的a,b,所有地方对a,b操作的值就是a,b的值。你在主函数重新定义了局部变量a,b,局部变量a,b的作用域就在主函数。而出去主函数的局部变量作用域,a,b的值就是全局变量定义的值。

[此贴子已经被作者于2017-5-17 00:48编辑过]

2017-05-17 00:46
苏护苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-5-4
收藏
得分:0 
还是不太明白,就第二个程序,定义了全局变量a,b那系统给他分配两块内存,主函数中给他赋值的时候是不是操作的是同一块内存?也就是说这整个程序里的a,b指的就是同一块内存的值?如果我前面说的正确,输出5,7的原因就是局部变量屏蔽全局变量吧?
2017-05-17 08:51
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:3 
以下是引用苏护苏在2017-5-17 08:51:42的发言:

还是不太明白,就第二个程序,定义了全局变量a,b那系统给他分配两块内存,主函数中给他赋值的时候是不是操作的是同一块内存?也就是说这整个程序里的a,b指的就是同一块内存的值?如果我前面说的正确,输出5,7的原因就是局部变量屏蔽全局变量吧?

不是同一块内存
#include <stdio.h>
int a=100, b=200;
main()
{
    printf("%p,%p\n",&a,&b);
    int a=5, b=7;
    printf("%p,%p\n",&a,&b);
}


[此贴子已经被作者于2017-5-17 10:15编辑过]

2017-05-17 10:13
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
#include <stdio.h>
int a=100, b=200;
main()
{
    int a=5, b=7;
    printf("%d %d\n",a,b);
    {
        extern int a,b;
        printf("%d %d\n",a,b);
    }
}
2017-05-17 10:17
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
CPP的也可以这样:
#include <stdio.h>
int a=100, b=200;
main()
{
    int a=5, b=7;
    printf("%d,%d\n",a,b);
    printf("%d,%d\n",::a,::b);
}
2017-05-17 10:20
快速回复:全局变量和局部变量
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029084 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved