C++ Primer中文版(第五版)--第二章 變數和基本型別
資料型別是程式的基礎,它告訴我們資料的意義以及我們能在資料上執行的操作
C++定義了幾種基本內建型別:字元、整型、浮點數等,同時程式設計師可以自定義資料型別,另外C++ 標準庫還定義了一些更加複雜的資料型別,如可變長字串和向量。
2.1 基本內建型別
算術型別:字元、整型數、布林值和浮點數
分為兩類:整型(包括,字元和布林型別);浮點型
其中,long long 是長整型(C++11),64位,long double 擴充套件精度浮點數,10位有效數字
布林型別的取值是真和假
有符號與無符號型別中,對於int, short, long, 預設是有符號的;與其他整型不同,字元型被分為了三種:char, signed char和unsigned char,其中char和singned char不一樣,其中char實際上會表現為有符號或無符號,具體是有編譯器決定。
空型別:不對應具體的值
型別轉換
字面常量
整型字面值和浮點型字面值;
字元和字串字面值:字串字面值的型別實際上是由常量字元構成的陣列,編譯器在每個字串的結尾處添加了一個空字元('\0')
轉義序列
一類是不可列印;另外一類是特殊字元(單引號、雙引號、問號、反斜槓)
布林字面值和指標字面值
2.2 變數
變數提供了一個具名的、可供程式操作的儲存空間,對於C++程式設計師來說,變數和物件一般可以互換。
C++中,在給建立物件的時候,物件獲得一個特定的值叫作初始化,初始化不是賦值。因為賦值的含義是把物件的當前值擦除,而用一個新值代替。
初始化方式:
int a = {0}; 或者 int a(0); 或者int a{0}.
預設初始化:類的物件,如何沒有顯式地初始化,則有其類確定。
變數宣告和定義的關係:
C++支援分離式編譯。
1. 宣告:使得名字為程式所知,一個檔案如果想使用別處定義的名字,則必須包含對那個名字的宣告
2. 定義:負責建立與名字關聯的實體。
聯絡----變數宣告規定了變數的型別和名字;區別----定義需要申請記憶體空間
如果想宣告一個變數而非定義它,就在變數名前新增關鍵字extern,而且不要顯式地初始化變數
如:extern int i; //宣告i而非定義i
int j; //宣告並定義j
extern double pi = 3.1416; //定義,變數賦了一個值,抵消了extern的作用了。
如果要在多個檔案中使用同一個變數,就必須將宣告和定義分離,此時,變數的定義必須出現在且只能出現一個檔案中,二其他用到該變數的檔案必須對器進行宣告,絕不可以重新定義。
C++識別符號
由字母、數字和下劃線組成,其中必須以字母或下劃線開頭。
名字的作用域
全域性作用域;
塊作用域;
內層作用域;
外層作用域;
2.3 複合型別
複合型別是指基於其他型別定義的型別。C++語言有幾種複合型別,如引用和指標。
引用:一個物件的別名,必須初始化。
指標:指向另外一種型別的複合型別,實現對物件的間接訪問。(1)指標本身是一個物件;(2)指標無須賦值。
空指標:不指向任何物件。
void* 指標:可用於存放任何物件的地址。
指向指標的引用:指標是物件,因此存在對指標的引用,如 int i = 42; int *p; int *&r = p; r = &i; *r=0;
2.4 const 限定符
如果想在多個檔案之間共享const物件,必須在變數的定義之前新增extern
指標和const
頂層const
2.5 類型別名
typedef double wages ; // wages是double的同義詞
typedef wages base, *p; // base是double的同義詞,p是double*的同義詞。
auto 型別說明符: auto型別是C++11引入的。
2.6 自定義資料結構
類義關鍵字struct開始,緊跟著類名和類體,主要類定義的最後加上分號。
預處理概述:
#ifndef SALES_DATA_H
#define SALES_DATA_H
............
#endif