日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作用域是程序的一個(gè)區(qū)域,一般來(lái)說(shuō)有三個(gè)地方可以定義變量:

  • 在函數(shù)或一個(gè)代碼塊內(nèi)部聲明的變量,稱(chēng)為局部變量;
  • 在函數(shù)參數(shù)的定義中聲明的變量,稱(chēng)為形式參數(shù);
  • 在所有函數(shù)外部聲明的變量,稱(chēng)為全局變量;

1. 局部變量

在函數(shù)或一個(gè)代碼塊內(nèi)部聲明的變量,稱(chēng)為局部變量。它們只能被函數(shù)內(nèi)部或者代碼塊內(nèi)部的語(yǔ)句使用。下面的實(shí)例使用了局部變量:

#include <iostream>
using namespace std;int main()
{	// 局部變量聲明int a, b;int c;// 實(shí)際初始化a = 10;b = 20;c = a + b;cout << "c is " << c << endl;	// c is 30return 0;
}

在一個(gè)函數(shù)體內(nèi)可以存在重名的變量,前提是它們的作用域不同。

#include <iostream>
using namespace std;int main()
{int b = 2;{int b = 1;cout << "b = " << b << endl;}cout << "b = " << b << endl;
}

當(dāng)變量間出現(xiàn)重名的情況下,作用域小的屏蔽作用域大的,所以上面第一個(gè) cout 輸出 b 的值為 1,但由于在塊里面申請(qǐng)的變量作用域只限于當(dāng)前塊,所以離開(kāi)這個(gè)塊后變量會(huì)自動(dòng)釋放,所以第二個(gè) cout 輸出 b 的值為 2。

2. 全局變量

在所有函數(shù)外部定義的變量(通常是在程序的頭部),稱(chēng)為全局變量。全局變量的值在程序的整個(gè)生命周期內(nèi)都是有效的。

全局變量可以被任何函數(shù)訪問(wèn)。也就是說(shuō),全局變量一旦聲明,在整個(gè)程序中都是可用的。下面的實(shí)例使用了全局變量和局部變量:

#include <iostream>
using namespace std;int g = 0;  // 全局變量聲明和初始化
int main()
{// 局部變量聲明int a, b;// 實(shí)際初始化a = 10;b = 20;g = a + b;cout << "g is " << g << endl;return 0; 
}

在程序中,局部變量和全局變量的名稱(chēng)可以相同,但是在函數(shù)內(nèi),局部變量的值會(huì)覆蓋全局變量的值。下面是一個(gè)實(shí)例:

#include <iostream>
using namespace std;int g = 0;  // 全局變量聲明和初始化
int main()
{int g = 100;cout << "g is " << g << endl;   // g is 100return 0; 
}

全局變量和和局部變量同名時(shí),可通過(guò)域名在函數(shù)中引用到全局變量,不加域名解析則引用局部變量。

#include<iostream>
using namespace std;int a = 10;
int main()
{int a = 20;cout << ::a << endl;   // 10cout << a << endl;     // 20return 0;
}

3. 局部變量和全局變量的初始化

  • 當(dāng)局部變量被定義時(shí),系統(tǒng)不會(huì)對(duì)其初始化,您必須自行對(duì)其初始化,否則在編譯階段會(huì)有告警產(chǎn)生;
  • 定義全局變量時(shí),系統(tǒng)會(huì)自動(dòng)初始化為下列值:
數(shù)據(jù)類(lèi)型初始化默認(rèn)值
int0
char‘\0’
float0
double0
pointerNULL

正確地初始化變量是一個(gè)良好的編程習(xí)慣,否則有時(shí)候程序可能會(huì)產(chǎn)生意想不到的結(jié)果。

4. 全局變量、局部變量、靜態(tài)全局變量、靜態(tài)局部變量的區(qū)別

4.1 靜態(tài)局部變量

C++ 中,我們可以在函數(shù)體內(nèi)聲明一個(gè)靜態(tài)局部變量( Static Local Variable )。它在函數(shù)運(yùn)行結(jié)束后不會(huì)消失,并且只有聲明它的函數(shù)中能夠使用它。

聲明一個(gè)靜態(tài)局部變量的方法是在聲明局部變量前加上 static ,例如:

static int a;

和全局變量類(lèi)似,如果我們沒(méi)有對(duì)一個(gè)靜態(tài)局部變量做初始化,則編譯器會(huì)自動(dòng)將它初始化為對(duì)應(yīng)類(lèi)型的 0。

示例代碼:

#include <iostream>
using namespace std;void demo()
{// 靜態(tài)局部變量,函數(shù)每次被調(diào)用后該值會(huì)被保存記錄下來(lái),下次調(diào)用會(huì)接著使用上次的值static int callNum = 0;callNum += 1;cout << "callNum is " << callNum << endl;
}int main() 
{for(int i=0; i<3; i++) {demo();}
}

輸出結(jié)果:

callNum is 1
callNum is 2
callNum is 3

如果一個(gè)函數(shù)運(yùn)行和它以前的運(yùn)行結(jié)果有關(guān),那么一般我們就會(huì)使用靜態(tài)局部變量。

見(jiàn)評(píng)論區(qū): https://www.runoob.com/cplusplus/cpp-variable-scope.html

總結(jié)

以上是生活随笔為你收集整理的C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。