VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 7261|回复: 145

《实用C++》第18课 局部变量和全局变量

  [复制链接]
01_avatar_middle
online_admins 发表于 2017-12-14 22:39:59 | 显示全部楼层 |阅读模式
1、什么是局部变量,什么是全局变量?
举个例子:张三是张三村的村长,李四是李四村的村长,那么张三村的村民有什么事儿都可以去找张三村,张三也对该存有管辖权,对吧?李四呢,自然李四村的村民都能找到李四这个村长了。反过来,你让李四村的村民去找张三村的村长来解决问题那肯定是不行的,不是一个村子,自然不能相互公用了。那么这时候呢如果出来个王五镇长,那么就方便多了。张三村和李四村的村民都可以直接找王五镇长办事儿。

所以这里面的张三、张三村的村民、李四、李四村的村民都算是局部变量,只能在自己的范围内或者说作用域内活动,那么王五镇长呢,他就算是个全局变量,张三村和李四村的村民都可以访问。处在一个全局的位置。

不知道通过这个形象的比喻大家对于局部变量和全局变量的总体上是否有个大概的了解。下面具体用代码的方式来说下!

2、代码方式讲解局部变量与全局变量:
#include <iostream>
using namespace std;

int sum = 0;
int add(int a, int b)
{
        int ret = a+b;
        return ret;
}

int main()
{
        int x = 2, y = 5;
        sum = add(x, y);
        cout << "sum = " << sum << endl;
        return 0;
}

这里面的 x 和 y 是局部变量,ret 呢也是局部变量,a 和 b 也算是 局部变量。都是局部变量,那么全局变量呢?是谁?没错,相信大家都已经猜到了,就是 sum,他的定义既没有在 main 函数中,也没有在 add 函数中,处在一个全局的位置。在 add 函数中可以访问,在 main 函数中也可以访问,并且都可以改变这个全局变量 sum 的值。

注意点:
①、函数内部定义的局部变量也只能在该函数中使用,其他的函数无法调用,例如:main 函数中的 x 和 y 在 add 函数是无法访问的。add函数中的 ret 在 main 函数中也是无法访问的;
②、不同函数或者作用域内可以定义相同名字的局部变量名字,虽然名字相同,但都是不同的个体,互不影响,彼此独立;
③、一般局部变量的作用域就在他所在的一对花括号内,函数的形参作用域也在其函数的整个作用域内,也是局部变量;
int x = 2, y = 5;
sum = add(x, y);
if (sum > 5)
{
        int k = 10;
        ++k;
}
这里面的变量 k 就是一个局部变量,他的作用域也只局限于 if 的 {} 花括号内。
④、全局变量的定义要尽量靠上,不然在他上面的函数使用不了,因为本身编译器编译代码的顺序就是自上向下。

3、多文件共同访问一个全局变量:
方法(回复帖子后可见):
①、在其中一个C/Cpp文件中定义并初始化全局变量,例如:
int sum = 0;
②、在C/Cpp文件都能访问到的一个h头文件中声明该全局变量为支持多文件访问的:
extern int sum; //此时只是声明,所以不需要初始化
③、在其他C/Cpp文件中 #include 这个头文件之后,就可以直接使用这个全局变量 sum 了。

备注:不能在 h 文件中直接定义这个全局变量 int sum = 0; 之前看到很多网友都是这么做的,这样的话如果有多个C/Cpp文件 include 包含这个头文件的时候就会提示 sum 重复定义了。所以一定要在 C/Cpp文件中定义该全局变量,之后在 h 头文件中声明该全局变量才行哦。

4、static 静态类型变量:
#include <iostream>
using namespace std;

int sum = 0;
int add(int a, int b)
{
        static int num = 1;
        int ret = a+b;
        ret += num;
        ++num;
        return ret;
}

int main()
{
        int x = 2, y = 5;
        sum = add(x, y);
        cout << "sum = " << sum << endl;

        sum = add(x, y);
        cout << "sum = " << sum << endl;

        sum = add(x, y);
        cout << "sum = " << sum << endl;
        return 0;
}

大家看到代码了吧,在main函数中连续调用了3次 add 函数,之后调用 cout 进行打印输出,那么大家先猜一下,这三次打印的结果都是多少呢?
下面我来给大家演示一下,具体看视频!

为什么会有这个结果呢?就是因为这里面定义了一个 static 类型的静态局部变量!他有什么特性呢?
static 静态类型局部变量只初始化一次,之后的调用都不进行初始化!

相关细节分析详见视频教程讲解!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38388453/?p=20
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1kpnrsoTwEErBC_D_T5JS4Q 提取码:pqhj
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:《实用C++》第17课 函数的返回值及几种调用方式
下一篇:《实用C++》第19课 数组与一维数组
65_avatar_middle
在线会员 发表于 2017-12-15 10:14:56 | 显示全部楼层
好好学习,天天向上
55_avatar_middle
在线会员 发表于 2017-12-21 17:18:01 | 显示全部楼层
期待SYC的大作啊
75_avatar_middle
在线会员 发表于 2017-12-30 22:35:11 | 显示全部楼层
vvvvvvvvvvvvvvvvvvvvvvvvvv
78_avatar_middle
在线会员 发表于 2018-1-5 09:36:28 | 显示全部楼层
期待中。。。
10_avatar_middle
在线会员 发表于 2018-1-13 13:59:10 | 显示全部楼层
感谢楼主分享
87_avatar_middle
在线会员 发表于 2018-1-22 13:17:16 | 显示全部楼层
cndb cndb cndb
94_avatar_middle
online_vip 发表于 2018-1-27 10:59:33 | 显示全部楼层
继续学习 感谢老大
75_avatar_middle
在线会员 发表于 2018-2-1 01:35:58 | 显示全部楼层
感谢老师分享那么好的教程
90_avatar_middle
online_vip 发表于 2018-2-1 13:52:07 | 显示全部楼层
支持了!!!!!!!!!!!!!!!
07_avatar_middle
online_vip 发表于 2018-2-1 14:46:31 | 显示全部楼层
看视频了
17_avatar_middle
在线会员 发表于 2018-2-1 18:41:14 | 显示全部楼层
感谢楼主分享
80_avatar_middle
在线会员 发表于 2018-2-3 10:55:34 | 显示全部楼层
继续学习。。。
89_avatar_middle
在线会员 发表于 2018-2-4 18:11:31 | 显示全部楼层
学习C++的变量~
13_avatar_middle
online_vip 发表于 2018-2-5 23:19:56 | 显示全部楼层
HELLO WORLD
98_avatar_middle
在线会员 发表于 2018-2-6 09:14:44 | 显示全部楼层
学习 知识
51_avatar_middle
online_vip 发表于 2018-2-6 09:47:33 | 显示全部楼层
支持syc老大
95_avatar_middle
online_vip 发表于 2018-2-6 09:48:25 | 显示全部楼层
SHOUXIA收下了
16_avatar_middle
online_vip 发表于 2018-2-7 02:36:24 | 显示全部楼层
ddddddddddddddd
32_avatar_middle
在线会员 发表于 2018-2-7 13:35:57 | 显示全部楼层
继续学习 感谢老大
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-7-17 15:17

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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