VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 644|回复: 6

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

[复制链接]
admin 发表于 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 静态类型局部变量只初始化一次,之后的调用都不进行初始化!

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

第18课免费试看,下载地址稍后奉上!
#######################################################
获得所有教学视频、课件、源代码以及售后答疑详见:
《实用C++》:http://www.cctry.com/thread-275996-1-1.html
VC驿站官方客服QQ:8260671

#######################################################

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

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

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

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

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

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

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

回复 支持 反对

使用道具 举报

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

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

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

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

回复 支持 反对

使用道具 举报

besteast 发表于 2017-12-30 22:35:11 | 显示全部楼层
vvvvvvvvvvvvvvvvvvvvvvvvvv

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

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

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

回复 支持 反对

使用道具 举报

csa 发表于 2018-1-5 09:36:28 | 显示全部楼层
期待中。。。

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

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

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

回复 支持 反对

使用道具 举报

foftiancai 发表于 3 天前 | 显示全部楼层
感谢楼主分享

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

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

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

回复 支持 反对

使用道具 举报

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

本版积分规则

 
 
在线客服
工作时间:
8:00-18:00
客服热线:
13591366679
官方微信扫一扫

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )

返回顶部
x

VC驿站微信公众号cctry2009

GMT+8, 2018-1-16 23:03

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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