OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4396|回复: 9

局部变量和全局变量有啥区别,全局变量不是可以代替局部变量吗

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-4-3
在线时间
4 小时
发表于 2018-4-8 22:23:02 | 显示全部楼层 |阅读模式
1金钱
我想问的是既然全局变量可以替换掉局部变量,为什么还要定义个局部变量,有什么区别啊?在按键实验中用局部变量KEY_UP来让按键变成连按无效的模式,代码:
u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;//按键松开标志
        if(mode)key_up=1;                   
        if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
        {
                delay_ms(10);
                key_up=0;
                if(KEY0==0)return KEY0_PRES;
                else if(KEY1==0)return KEY1_PRES;
                else if(KEY2==0)return KEY2_PRES;
                else if(WK_UP==1)return WKUP_PRES;
        }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;             
        return 0;
}

如果在主函数定义一个全局变量key_up,然后再程序前声明一下,那么去掉static u8 key_up=1这句也是可以的。。功能完全一样,定义个局部变量,有什么区别啊?


最佳答案

查看完整内容[请看2#楼]

具体来说,全局变量和局部变量的区别如下: 1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等 2. 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区 3. 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了 4. 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2018-4-8 22:23:03 | 显示全部楼层
本帖最后由 rindy 于 2018-4-11 16:36 编辑

具体来说,全局变量和局部变量的区别如下:
1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
2. 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区
3. 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了
4. 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量
注意一点局部变量不要定义的太大,否则会出现莫名其妙的问题


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-9 01:53:36 | 显示全部楼层
你应该重学C语言。
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
发表于 2018-4-9 07:25:47 来自手机 | 显示全部楼层
局部变量在函数运行结束后会释放内存
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2018-4-9 08:38:03 | 显示全部楼层
能放在自己屋里用的东西,为什么要共享出来给大家?
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-4-9 08:44:55 | 显示全部楼层
局部变量最大的优势是  整个设计是模块化的.使用全局变量就不方便移植了.
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2018-4-9 08:52:04 | 显示全部楼层
本帖最后由 来俩不甜的 于 2018-4-9 08:55 编辑

一个函数若只有局部变量,那就是可重入函数,若带有全局变量或是局部静态变量那就是不可重入函数。这些都是对于操作系统来说的,对于裸跑不究根结底的话,不递归调用没啥太大区别
我有故事,你有酒吗
回复

使用道具 举报

57

主题

316

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1344
金钱
1344
注册时间
2018-1-11
在线时间
156 小时
发表于 2018-4-9 09:08:14 | 显示全部楼层
还是回去多看看C语言的书,这个问题完全自己可以解决
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2018-4-9 09:08:56 | 显示全部楼层
全局变量满天飞是灾难的开始
回复

使用道具 举报

37

主题

596

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1574
金钱
1574
注册时间
2017-7-17
在线时间
308 小时
发表于 2018-4-9 09:17:36 | 显示全部楼层
你这样的想法是只见树木。。。不见森林。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 13:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表