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

 

三、局部變量和全局變量的初始化

 

示例:

#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;
}

 

 

 在一個函數體內可以存在重名的變量,前提是它們的作用域不同

#include <iostream>
using namespace std;

int main()
{
    int b = 2;
    {
        int b = 1;
        cout << "b = " << b << endl;
    }
    cout << "b = " << b << endl;
}

當變量間出現重名的情況下,作用域小的屏蔽作用域大的,所以上面第一個 cout 輸出 b 的值為 1,但由於在塊里面申請的變量作用域只限於當前塊,所以離開這個塊后變量會自動釋放,所以第二個 cout 輸出 b 的值為 2

 

 

 

全局變量的值可以在局部函數內重新賦值

#include <iostream>

using namespace std;

// 全局變量聲明
int g = 20;
int fun1(int a,int b){
    g=a+b;
    cout<<"被改變的全局變量為:"<<g<<endl;
    return 0;
}

int fun2(){
    cout<<"此時的全局變量為:"<<g<<endl;
    return 0;
}

int main(){
    fun2();
    fun1(10,20);
    fun2();
    return 0;
}

 

 

 

 

 

 

 

 全局變量和和局部變量同名時,可通過域名在函數中引用到全局變量,不加域名解析則引用局部變量 

#include<iostream>
using namespace std;

int a = 10;
int main()
{
    int a = 20;
    cout << ::a << endl;   // 10   【可引用也可以重新賦值】
    cout << a << endl;     // 20
    return 0;
}

 

 

 

 

 

 

 

 C++全局變量 局部變量  靜態全局變量  靜態局部變量的區別

 

 

 

全局變量和局部變量作用域不同,static 關鍵字可限定引用范圍:

#include <stdio.h>

int s32Test;   // 定義全局變量,系統默認初始化0

static void Fun();  // 聲明只限定在被當前文件調用的函數


static void Fun()
{
    int s32Test = 1;  // 局部變量,如果不初始化,會是一個隨機數值

    //與全局變量名相同,會屏蔽全局變量調用,s32Test = 1
    printf("This is Fun(),s32Test = %d!", s32Test);  
}

int main()
{
    Fun();
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM