C++ 变量作用域

通常来说,一段程序代码中所用到的名字并不总是有效/可用的, 而限定这个名字的可用性的代码范围就是这个名字的作用域。

作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突

一般来说有三个地方可以定义变量:

  • 在函数或一个代码块内部声明的变量,称为 局部变量

  • 在函数参数的定义中声明的变量,称为 形式参数

  • 在所有函数外部声明的变量,称为 全局变量

我们将在后续的章节中学习什么是函数和参数。

在本章我们先来学习局部变量声明和全局变量的声明

局部变量

在函数或一个代码块内部声明的变量,称为局部变量。

局部变量只能被函数内部或者代码块内部的语句使用。

我们来看一个使用了局部变量的范例

/**
 * file: main.cpp
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

#include <iostream>
using namespace std;

int main ()
{
  // 局部变量声明
  int a, b;
  int c;

  // 实际初始化
  a = 17;
  b = 29;
  c = a + b;

  cout << c << endl;;

  return 0;
}

编译运行以上程序,输出结果如下

$ g++ main.cpp && ./a.out
46

全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。

全局变量的值在程序的整个生命周期内都是有效的。

全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。

我们来看一个使用了全局变量和局部变量的范例

/**
 * file: main.cpp
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

#include <iostream>
using namespace std;

// 全局变量声明
int g;

int main ()
{
  // 局部变量声明
  int a, b;

  // 实际初始化
  a = 17;
  b = 33;
  g = a + b;

  cout << g << endl;

  return 0;
}

编译运行以上范例,输出结果如下

$ g++ main.cpp && ./a.out
50


在程序中,局部变量和全局变量的名称可以相同 但是在函数内,局部变量的值会覆盖全局变量的值。

看一个局部变量屏蔽全局变量的范例

/**
 * file: main.cpp
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

#include <iostream>
using namespace std;

// 全局变量声明
int g = 33;

int main ()
{
  // 局部变量声明
  int g = 17;

  cout << g << endl;

  return 0;
}

编译运行以上范例,输出结果如下

$ g++ main.cpp && ./a.out
17

局部变量和全局变量初始化

当局部变量被定义时,系统不会对其初始化,我们必须自行对其初始化。

但定义全局变量时,系统会自动初始化为下列值:

数据类型 初始化默认值
int 0
char '\0'
float 0
double 0
pointer NULL

最佳实战

正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果

C++ 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.