變量
變量是程序可操作的存儲區(qū)的名稱。C++中每個(gè)變量都有指定的類型,不同類型的變量有不同的存儲大小和布局。變量存儲于內(nèi)存中,運(yùn)算符可應(yīng)用于變量上。
變量的類型
| 類型 | 解釋 |
|---|---|
| bool | 存儲true或false |
| char | 一個(gè)字符,通常占一個(gè)字節(jié)。整數(shù)類型。 |
| int | 整形,占四字節(jié)。 |
| float | 單精度浮點(diǎn)數(shù),四字節(jié),1位符號,8位指數(shù),23位尾數(shù) |
| double | 雙精度浮點(diǎn)數(shù),八字節(jié),1位符號,11位指數(shù),52位尾數(shù) |
| void | 類型缺失 |
| wchar_t | 寬字符型 |
另外可以定義枚舉、指針、數(shù)組、引用、數(shù)據(jù)結(jié)構(gòu)、類等。
變量的定義和初始化
變量的定義即要求編譯器在此處創(chuàng)建變量的存儲:
typeA var; //聲明一個(gè)變量
typeB var1, var2, var3; //聲明多個(gè)變量
變量可以在定義的時(shí)候被初始化:
int a; //聲明時(shí)未初始化
int b = 3; //聲明時(shí)初始化為3
定義時(shí)沒有初始化的帶有靜態(tài)存儲持續(xù)時(shí)間的(一般表現(xiàn)為全局變量)變量默認(rèn)初始化為NULL,即所有字節(jié)都是0;
其他所有變量(一般表現(xiàn)為局部變量)的初始值未定義的話為為其開辟的存儲空間的原內(nèi)容(亂碼)。
強(qiáng)烈建議定義變量時(shí)手動初始化以確保安全
在變量創(chuàng)建的時(shí)候指明其類型有助于劃定對應(yīng)的空間,和未來程序以何種方式處理(解讀)此變量的指針。
變量的聲明不同于變量的定義
int a = 0; //定義并聲明了變量 a
extern int a; //只是聲明了有一個(gè)變量 a 存在,具體 a 在哪定義的,需要編譯器編譯的時(shí)候去找。
類似于函數(shù)的聲明與函數(shù)的定義之間的區(qū)別。
void fun1(); //函數(shù)聲明
void fun1(){ //函數(shù)定義
cout<<"fun1"<<endl;
}
類型轉(zhuǎn)化規(guī)則
分為自動轉(zhuǎn)化、強(qiáng)制轉(zhuǎn)化
自動轉(zhuǎn)化
- 參與運(yùn)算的量的類型不同,則轉(zhuǎn)化為相同后運(yùn)算
- 數(shù)據(jù)類型轉(zhuǎn)換力求保證精度:
- 向字節(jié)數(shù)高的方向靠攏;
- 向無符號的方向靠攏。
- 浮點(diǎn)數(shù)運(yùn)算統(tǒng)一轉(zhuǎn)換為double雙精度再進(jìn)行運(yùn)算。
- char與short運(yùn)算時(shí)先轉(zhuǎn)化為int再參與運(yùn)算。
- 賦值運(yùn)算保留左值的數(shù)據(jù)類型(可能會丟失精度)。
強(qiáng)制轉(zhuǎn)化
可以手動通過類型轉(zhuǎn)化運(yùn)算來實(shí)現(xiàn):一般形式為(類型說明符)表達(dá)式的形式。
int a = 1;
double b = 2.1;
cout << "a + b = " << a + (int)b << endl; //輸出為a + b = 3
C++賦值運(yùn)算符的左值(lvalue)和右值(rvalue)
左值 (lvalue, locator value) 表示了一個(gè)占據(jù)內(nèi)存中某個(gè)可識別的位置(也就是一個(gè)地址)的對象,左值可以被操作。
右值(rvalue)表示了一個(gè)非內(nèi)存可識別對象的值,不能被操作。
左值和右值的說法常在錯(cuò)誤信息中出現(xiàn)。