浅谈C++变量作用域

 更新时间:2020年06月23日 08:38:10   作者:菜鸟教程  
这篇文章主要介绍了C++变量作用域的的相关资料,文中代码非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

C++ 变量作用域

作用域是程序的一个区域,一般来说有三个地方可以定义变量:

  • 在函数或一个代码块内部声明的变量,称为局部变量。
  • 在函数参数的定义中声明的变量,称为形式参数。
  • 在所有函数外部声明的变量,称为全局变量。

我们将在后续的章节中学习什么是函数和参数。本章我们先来讲解什么是局部变量和全局变量。

局部变量

在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。下面的实例使用了局部变量:

#include <iostream>
using namespace std;
 
int main ()
{
 // 局部变量声明
 int a, b;
 int c;
 
 // 实际初始化
 a = 10;
 b = 20;
 c = a + b;
 
 cout << c;
 
 return 0;
}

全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。

全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。下面的实例使用了全局变量和局部变量:

#include <iostream>
using namespace std;
 
// 全局变量声明
int g;
 
int main ()
{
 // 局部变量声明
 int a, b;
 
 // 实际初始化
 a = 10;
 b = 20;
 g = a + b;
 
 cout << g;
 
 return 0;
}

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

#include <iostream>
using namespace std;
 
// 全局变量声明
int g = 20;
 
int main ()
{
 // 局部变量声明
 int g = 10;
 
 cout << g;
 
 return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

10

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

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:

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

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

在程序中,局部变量和全局变量的名称可以相同。

但是在函数内的局部变量与全局变量是两个独立的变量,互不影响。

下述代码中,全局变量定义了一个int g=99,局部变量定义了一个int g=10,由于这两个g所在的作用域不同,所以各自独立。

#include <iostream>
using namespace std;

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

// 函数声明
int func();

int main()
{
 // 局部变量声明
 int g = 10;
 //cout << g;
 int kk = func();
 cout << kk;
 return 0;
}

// 函数定义
int func()
{
 return g;
}

以上就是由浅入深学习C++变量作用域的详细内容,更多关于C++变量作用域的资料请关注脚本之家其它相关文章!

相关文章

  • C++11利用原子操作实现自旋锁

    C++11利用原子操作实现自旋锁

    C++自旋锁是一种低层次的同步原语,用于保护共享资源的访问,这篇文章主要为大家介绍了如何利用原子操作实现自旋锁,感兴趣的小伙伴可以了解下
    2023-09-09
  • 利用C语言实现扫雷小游戏

    利用C语言实现扫雷小游戏

    这篇文章主要为大家详细介绍了利用C语言实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • 简单讲解C++的内部和外部函数以及宏的定义

    简单讲解C++的内部和外部函数以及宏的定义

    这篇文章主要介绍了简单讲解C++的内部和外部函数以及宏的定义,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言结构体占用内存深入讲解

    C语言结构体占用内存深入讲解

    这篇文章主要给大家介绍了关于C语言结构体占用内存的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C语言中strcpy()函数的具体实现及注意事项

    C语言中strcpy()函数的具体实现及注意事项

    C语言库函数char *strcpy(char *dest, const char *src)把src所指向的字符串复制到dest,下面这篇文章主要给大家介绍了关于C语言中strcpy()函数的具体实现及注意事项的相关资料,需要的朋友可以参考下
    2022-11-11
  • 解决Visual Studio Code错误Cannot build and debug because the

    解决Visual Studio Code错误Cannot build and debug because 

    这篇文章主要为大家介绍了解决Visual Studio Code错误Cannot build and debug because the及分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • C++二维数组中数组元素存储地址的计算疑问讲解

    C++二维数组中数组元素存储地址的计算疑问讲解

    今天小编就为大家分享一篇关于C++二维数组中数组元素存储地址的计算疑问讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 解决VC++编译报错error C2248的方案

    解决VC++编译报错error C2248的方案

    这篇文章主要介绍了解决VC++编译报错error C2248的方案的相关资料,需要的朋友可以参考下
    2015-11-11
  • C++编写实现飞机大战

    C++编写实现飞机大战

    这篇文章主要为大家详细介绍了C++编写实现飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • matlab模拟退火算法单约束车间流水线调度解决实现及示例

    matlab模拟退火算法单约束车间流水线调度解决实现及示例

    这篇文章主要为大家介绍了matlab模拟退火算法求解单约束车间流水线调度的实现及示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02

最新评论