C 區域性變數 全域性變數和 extern

2021-10-02 09:56:04 字數 1571 閱讀 1305

// 區域性變數是被auto修飾的(在c++11中auto又有了新的含義,後面專門寫一篇文章介紹)

auto

int a =0;

auto

float f =

9.7f

;auto

double b =

10.8

;

注意

結構體內的成員變數不是區域性變數的意思

函式的形參也是區域性變數,函式執行結束,形參的生命週期(或作用域)就結束了,這與for迴圈等結構中定義的區域性變數相似,所以函式不能返回區域性變數的位址,函式執行結束,區域性變數被釋放,返回的位址成為了野指標

不同的作用域內可以定義相同名字的變數,若作用域巢狀,名字相同的變數在小作用域內定義的變數在小作用域內起作用,大作用域內定義的變數在大作用域內起作用,兩者沒有任何關係

void

func()

cout << i << endl;

}// 執行結果:10 3 10

extern

int n1 =10;

// 完整的定義乙個全域性變數

int n2 =9;

// 省略 extern 儲存型別說明符

int n3;

// 省略 extern 儲存型別說明符,且未初始化,os自動初始化為0

void

func()

// 執行結果:10 9 0

注意

區域性位置宣告全域性變數,不可以省略儲存型別說明符extern,特別需要注意的一點是在區域性位置宣告全域性變數時,不能對全域性變數進行初始化操作

// *****= 測試 *****=

// file: a.cpp

#include

using

namespace std;

void

func()

// file: b.cpp

#include

using

namespace std;

int n =9;

void

func()

;int

main()

// 執行結果:9

在多檔案程式設計中,使用其他檔案中定義的全域性變數需要加上儲存型別說明符 extern

// *****= 測試 *****=

// file: a.cpp

#include

using

namespace std;

extern

int n;

void

func()

// file: b.cpp

#include

using

namespace std;

int n =9;

void

func()

;int

main()

// 執行結果:9

如果未特殊說明,以上測試均是在win10 vs2017 64bit編譯器下進行的

C 區域性變數和全域性變數

在乙個函式內部定義的變數是內部變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使用它們,在此函式以外是不能使用這些變數的。同樣,在復合語句中定義的變數只在本復合語句範圍內有效。這稱為區域性變數 local variable 如 對區域性變數的一些說明 1 主函式main中定義的變數 m,n ...

c 全域性變數 區域性變數

全域性變數即在函式外宣告的變數,區域性變數即在函式內部宣告的變數,例如 include float num 3.14 乙個名為num的全域性變數 void main float num 2.45 乙個名為num的區域性變數 cout3.14 當區域性變數和全域性變數同名時,在區域性變數作用域內使用該...

c 全域性變數,區域性變數

區域性變數又稱內部變數,是函式內部定義的變數,作用域在定義其的函式內部 全域性變數又稱外部變數,作用於是從其定義開始一直到源程式結束 不論是全域性變數還是區域性變數都是乙個空間上的範圍,即作用域 相對於變數的空間範圍,靜態和動態變數則指乙個時間上的範圍,所謂靜態變數就是在定義時分配固定儲存單元,知道...