VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 5137|回复: 123

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

  [复制链接]
01_avatar_middle
online_admins admin 发表于 2017-12-14 22:39:59 | 显示全部楼层 |阅读模式
《实用C++》第18课 局部变量和全局变量《实用C++》第18课 局部变量和全局变量

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 静态类型局部变量只初始化一次,之后的调用都不进行初始化!

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

第18课免费试看,下载地址(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

#######################################################
获得所有教学视频、课件、源代码以及售后答疑详见:
《实用C++》:https://www.cctry.com/thread-275996-1-1.html
VC驿站官方客服QQ:8260671

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




上一篇:《实用C++》第17课 函数的返回值及几种调用方式
下一篇:!张==18,意思为值是0,为啥输入0不通过

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

65_avatar_middle
在线会员 ping170 发表于 2017-12-15 10:14:56 | 显示全部楼层
好好学习,天天向上

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

55_avatar_middle
在线会员 Smallbee 发表于 2017-12-21 17:18:01 | 显示全部楼层
期待SYC的大作啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
在线会员 besteast 发表于 2017-12-30 22:35:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

78_avatar_middle
在线会员 csa 发表于 2018-1-5 09:36:28 | 显示全部楼层
期待中。。。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

10_avatar_middle
在线会员 foftiancai 发表于 2018-1-13 13:59:10 | 显示全部楼层
感谢楼主分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

87_avatar_middle
在线会员 God9900 发表于 2018-1-22 13:17:16 | 显示全部楼层
cndb cndb cndb

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

94_avatar_middle
online_vip08 Mtong 发表于 2018-1-27 10:59:33 | 显示全部楼层
继续学习 感谢老大

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
在线会员 jerichoyin 发表于 2018-2-1 01:35:58 | 显示全部楼层
感谢老师分享那么好的教程

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

90_avatar_middle
online_vip 16200 发表于 2018-2-1 13:52:07 | 显示全部楼层
支持了!!!!!!!!!!!!!!!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

07_avatar_middle
online_vip 微笑的向日葵 发表于 2018-2-1 14:46:31 | 显示全部楼层
看视频了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

17_avatar_middle
在线会员 chenhu 发表于 2018-2-1 18:41:14 | 显示全部楼层
感谢楼主分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

80_avatar_middle
在线会员 zp521 发表于 2018-2-3 10:55:34 | 显示全部楼层
继续学习。。。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

89_avatar_middle
在线会员 yyanjun 发表于 2018-2-4 18:11:31 | 显示全部楼层
学习C++的变量~

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

13_avatar_middle
online_vip 明天你好123 发表于 2018-2-5 23:19:56 | 显示全部楼层
HELLO WORLD

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

98_avatar_middle
在线会员 tomok 发表于 2018-2-6 09:14:44 | 显示全部楼层
学习 知识

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

51_avatar_middle
online_vip zxnnnnn 发表于 2018-2-6 09:47:33 | 显示全部楼层
支持syc老大

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

95_avatar_middle
online_vip labc123 发表于 2018-2-6 09:48:25 | 显示全部楼层
SHOUXIA收下了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

16_avatar_middle
online_vip zhangxinsong 发表于 2018-2-7 02:36:24 | 显示全部楼层
ddddddddddddddd

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

32_avatar_middle
在线会员 这个杀手不太冷 发表于 2018-2-7 13:35:57 | 显示全部楼层
继续学习 感谢老大

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

GMT+8, 2018-12-11 02:49

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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