C++函数五(局部变量与全局变量和域运算符)

根据变量作用域的不同,可将程序中的变量分为局部变量和全局变量。

1.局部变量

在函数或者块内定义的变量称为局部变量。局部变量仅在定义它的函数或块内起作用,在这个范围之外不能使用这些变量。局部变量的作用域也称为块作用域。
函数内部使用的局部变量包括形式参数和函数体内定义的变量。例如:

float  f1(int a)
{......
int b, c;//局部变量 a ,b ,c在函数体f1内有效
....
}
void main()
{
    ......
        int m, n;//局部变量m,n 有效,局部变量a,b,c 无效
    ......
}

 说明:
(1)不同函数中可以使用相同名字的变量,它们代表不同的变量,互不干扰
(2)形式参数也是局部变量

2全局变量

在函数外部定义的变量称为全局变量。全局变量的作用域是从定义的位置开始到本源文件的结束。它可以为本文件中的其他函数所共用。全局变量可以在各个函数之间建立数据传输通道,但滥用会破坏程序的模块化结构。全局变量在编译时在全局数据区分配内存空间,在未给出初始化值时系统自动初始化为0。

说明:

(1)全局变量的作用是增加了函数间数据联系的渠道。由于同一个文件中都能使用全局变量的值,因此,在一个函数中改变了全局变量的值,就会影响到其他函数。过多使用全局变量将会降低程序的清晰性。
(2)全局变量在程序的执行过程中都在存储空间,而不是仅在需要时才开辟空间

(3) 使用全局变量降低了函数的通用性,因为函数执行时要依赖与其所在的外部变量如果一个函数移到另一个文件,则需将有关的全局变量及其值一起移过去。但如果该全局变量变量与其他文件的变量同名,将会出现问题,降低程序的可靠性和通用性。

3.域运算符

通常情况下,如果有两个同名变量,一个是全局的,另一个是局部的,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::”。“::”称为作用域运算符。

例1: 全局变量和局部变量同名

#include<iostream>
using namespace std;
int avar=10; //全局变量avar
int main(){
        int avar;  //局部变量avar
        avar=25;
        cout<<"avar is "<<avar<<endl;  //将会输出avar is 25
        return 0;
}

例2: 作用域运算符的使用。

#include<iostream>
using namespace std;
int avar=10; //全局变量avar
int main(){
        int avar;  //局部变量avar
        avar=25;
        cout<<"local avar is "<<avar<<endl;  //将会输出 local avar is 25
        cout<<"global avar is "<<::avar<<endl;  //将会输出 global avar is 10
        return 0;
}
原文地址:https://www.cnblogs.com/CX66/p/13921916.html