第二章 變數和基本型別 2 2變數

2021-10-17 20:42:19 字數 2167 閱讀 3943

變數提供乙個具名的、可供程式操作的儲存空間。一般而言,"變數(variable)"和「物件(object)"可以互換使用。

變數定義基本形式:首先是型別說明符(type specifier),隨後緊跟由乙個或多個變數名組成的列表,變數名以逗號分隔,最後以分號結束。

初始值

物件在建立時獲得了乙個特定的值,稱為物件被初始化(initialized)。用於初始化變數的值可以是任意複雜的表示式。

在同一條定義語句中,可以用先定義的變數值去初始化後定義的其他變數。

初始化不是賦值,初始化的含義是建立變數時賦予其乙個初始值,賦值的含義是把物件當前的值擦除,以乙個新值來替代。

列表初始化

初始化有幾種不同的形式,例如定義乙個名為 units_sold 的 int 變數並初始化為 0,以下語句均可實現:

int units_sold =0;

int units_sold =

;int units_sold

;int

units_sold(0

);

利用花括號進行初始化的形式被稱為列表初始化(list initialization),初始化物件或某些情況下為物件賦新值,均可使用列表初始化。

使用列表初始化且初始值存在資訊的風險,編譯器將報錯,如:

long

double ld =

3.1415926536

;int a

, b =

;// 錯誤: 轉換未執行,因為存在丟失資訊的危險

inta

(ld)

, b = ld;

// 正確: 轉換執行,且確實丟失了部分值

預設初始化如果定義變數時沒有定義初始值,則變數被預設初始化(default initialized)。預設值到底是什麼由變數型別決定,同時定義變數的位置也會對此有影響。

如果是內建型別的變數未被顯式初始化,它的值由定義的位置決定:

每個類各自決定其初始化物件的方式,而且,是否允許不經初始化就定義物件也由類自己決定。

std::cin >>

int input_value;

// 錯誤:輸入運算子的右側需要乙個明確的變數名稱

int i =

;// 告警

double salary = wage =

9999.99

;// 錯誤:在宣告語句中宣告多個變數時需要用逗號將變數名隔開,不能直接用賦值運算子連線

int i =

3.14

;// 告警

為了支援分離式編譯,c++ 語言將宣告和定義區分開來。

宣告(declaration)使得名字為程式所知,定義(definition)負責建立與名字關聯的實體。

變數宣告規定了變數的型別和名字,定義則還申請儲存空間,也可能會為變數賦乙個初始值。

如果想宣告乙個變數而非定義它,就在變數名前新增關鍵字extern,而且不要顯式地初始化變數。

任何包含了顯式初始化的宣告即成為定義,extern語句如果包含初始值就不再是宣告,而變成了定義。

變數的定義必須出現且只能出現在乙個檔案中,而其他用到該變數的檔案必須對其進行宣告,卻絕對不能重複定義。

識別符號由字元、數字和下劃線組成,其中必須已字母或下劃線開頭。使用者自定義的識別符號不能使用 c++ 保留的名字,不能連續出現兩個下劃線,也不能已下劃線緊連大寫字母開頭,定義在函式體外的識別符號不能以下劃線開頭。

變數命名規範

絕大多數作用域都以花括號分隔。同乙個名字在不同的作用域可能指向不同的實體。名字的有效區域始於名字的宣告語句,以宣告語句所在的作用域末端為結束。

巢狀作用域

作用域能彼此包含,被包含(被巢狀)的作用域稱為內層作用域(inner scope),包含著別的作用域的作用域稱為外層作用域(outer scope)。

作用域中一旦宣告了某個名字,它所巢狀著的所有作用域中都能訪問該名字。同時,允許在內層作用域中重新定義外層作用域已有的名字。

第二章 變數和基本型別

第二章 變數和基本型別 1 基本內建型別 1 有效數字 float 6位 double 10位 2 符號位 使用一位符號位的表示方式的8位signed整型取值是 128到127 3 越界賦值 取值數目求模 2 字面值常量 1 無符號長整型 1024ul 2 字串 自動在末尾新增乙個空字元 3 變數 ...

第二章 變數和基本型別

識別符號 運算子 宣告符 2.3 復合型別 基於其他型別定義的型別 1.引用 定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和他的初始值一直繫結在一起,所以無法令引用重新繫結到另外乙個物件,所以引用必須初始化 2.指標 指標本身是乙個物件,...

第二章 變數和基本型別

切勿混用帶符號數和無符號數 include using namespace std int main 輸出的結果一直都是no,所以不可混用,請注意size 返回的是size type型別,而該型別也是unsigned的。只有內建型別存在字面值,字面值常量的值是不能修改的 它存放在 段中 內建型別的全...