C++變量類型
變量為我們提供了命名存儲,讓程序可以操縱。在C++中的每個變量有特定的類型,它確定大小和可變存儲器的布局;存儲器內存儲值的範圍;該組操作可以變量應用。
一個變量名可以由字母,數字和下劃線。它必須以字母或下劃線。大寫和小寫字母是不同的,因為C++是區分大小寫的:
有以下幾個基本類型在C++中:
類型 | 描述 |
---|---|
bool | 存儲值為true或false |
char | 通常單個字節(一個字節)。這是一個整數類型 |
int | 整數是機器上最自然的存儲尺寸大小 |
float | 單精度浮點值 |
double | 雙精度浮點值 |
void | 表示不存在的類型 |
wchar_t | 寬字符類型 |
C++也允許定義各種其他類型的變量,像枚舉,指針,數組,引用,數據結構和類將在後麵的章節涵蓋。
以下部分將介紹如何定義,聲明和使用不同類型的變量。
在C++定義變量:
一個變量的定義是指,告訴編譯器在哪裡,有多少創建存儲變量。變量定義指定一個數據類型,並且包含該類型如下的一個或多個變量的列表:
type variable_list;
在這裡,類型必須包括char, w_char, int, float, double, bool 以及有效的C++數據類型,布爾或任何用戶定義的對象等,並variable_list可以由用逗號分隔的一個或多個標識符名稱。一些有效的聲明如下所示:
int i, j, k; char c, ch; float f, salary; double d;
該行int i, j, k;既聲明和定義的變量 i, j 和k;這指示編譯器創建一個名為 i, j 和k 的int類型變量。
變量可以初始化(分配初始值)在其聲明。初始化包括一個等號後跟一個常量表達式如下:
type variable_name = value;
一些實例是:
extern int d = 3, f = 5; // declaration of d and f. int d = 3, f = 5; // definition and initializing d and f. byte z = 22; // definition and initializes z. char x = 'x'; // the variable x has the value 'x'.
對於冇有初始化定義:具有靜態存儲時間變量隱含NULL初始化(所有字節的值為0);所有其它變量的初始值是不確定的。
在C++聲明變量:
變量聲明提供了保證,編譯器,有一個變量存在具有給定類型和名稱,這樣編譯器進行進一步的編輯,而不需要對變量的完整細節。變量聲明有其意義在編譯時止,編譯器需要實際的變量聲明在鏈接程序的時間。
當使用多個文件變量聲明是有用的,在其中將在連接程序的時候其中一個文件定義的變量。使用extern關鍵字在任何地方來聲明一個變量。雖然可以在C++程序中聲明一個變量多次,但它可以在一個文件中,一個函數或代碼塊中定義一次。
例子
試試下麵的例子,其中一個變量已經在頂部聲明,但它已被定義的主函數中:
#include <iostream> using namespace std; // Variable declaration: extern int a, b; extern int c; extern float f; int main () { // Variable definition: int a, b; int c; float f; // actual initialization a = 10; b = 20; c = a + b; cout << c << endl ; f = 70.0/3.0; cout << f << endl ; return 0; }
讓我們編譯和運行上麵的程序,這將產生以下結果:
30 23.3333
同樣的概念也適用於函數的聲明,提供一個函數名在其聲明的時間和它的實際定義可以在其他地方給出。例如:
// function declaration int func(); int main() { // function call int i = func(); } // function definition int func() { return 0; }
左值和右值:
在C++中有兩種表達式:
-
左值 : 引用一個存儲器位置的表達式被稱為“左值”表達。左值可能顯示為任一左側或賦值的右側。
-
右值 : 術語右值是指被存儲在存儲器中的某些地址的數據值。右值是不能分配給值,這意味著右值可能出現在賦值的右手而不是左側的表達式。
變量是左值等都可能出現在賦值的左側。數字文字是右值,因此可能不會被分配的,不能出現在左側。下麵是一個有效的語句:
int g = 20;
但是,下麵不是一個有效的聲明,並會產生編譯時錯誤:
10 = 20;