C Primer學習筆記《1》

2021-06-22 07:51:00 字數 3476 閱讀 3589

void

也是一種型別,常用於返回值為

void

的函式return

處。c++

只是規定了各種基本內建型別的最小儲存空間,並沒有限制其上限值,對於

int,大部分的編譯器實現採用的空間都會比要求的大,一般為

32bits

。但其規定最小空間大小是

16bits。

在c++

中,並沒有關於

bool

型別的最小儲存空間限制,

bool

變數在c++

也許是不占用記憶體空間的,語言層面的實現就是巨集定義,定義了兩個值,

true

和false。

short

,int

的最小16bits

;long

最小32bits

float

型別只能表示

6位有效數字,運算中會產生丟失精度的情況,不適合浮點運算。

double

能表示10

位有效數字,適合浮點運算,關鍵是

double

的運算成本基本和

float

的扯平,多出的部分可以忽略不計。

一般的編譯器實現中,

short

佔半個字長(一台

32位的機器,其字長是

4個位元組,也就是乙個字),

int乙個字長,

long

乙個或兩個字長(在

32位機器中,通常情況下

long

和int

都是乙個字長)。

可以將算術型別的任何值(無論整型與浮點型,無論正與負或是

0,都可以)賦給

bool

型別的變數,原則是

0值代表

false

,其餘的非

0值均為

true。

整型是有無符號和有符號之分的,關鍵字是

unsigned。

在c++

中將負數賦給無符號整數是合法的,但變數中儲存的值是被取模後的值。

浮點數是區別於整型為代表的定點數得名的,點就是實數中的小數點。一般情況下

float

採用乙個字(

32bits

),double

採用兩個字(

64bits

),long double

採用三個或是四個字(

96bits

或是128bits

)。型別的取值範圍決定了浮點數能表示的有效數字位數。

整型運算中,

long

型別雖然精度高於

int,但其增加的運算成本卻是不可忽略的,成本大大增加。

字面值常量,稱之為字面值是因為只能用它的值來稱呼它,常量是因為它不能被修改。每乙個字面值都有對應的型別,但其統統為常量。只有基本內建型別有字面值常量,類型別沒有字面值常量。 以

0(零)開頭的字面值表示

8進製數,以

0x或是

0x開頭的字面值表示

16進製制的數。整型字面值的預設型別是

int或是

long

,如果值的大小在

int表示範圍內就是

int;如果超出了

int那就是

long。

字面值後面加u或是

u可以將字面值變成無符號。同理加上l或是

l可變成長型別。

預設的浮點型字面值是

double

,除非顯示的在浮點數後面加上f或是

f明確指出浮點型別是

float。

bool

型別的字面值就是

true

和false

這兩個值。

字串字面值的前面或是後面新增l或是

l均可變成寬字元。

將字串字面值和寬字串字面值連線,將會出現未定義行為。

多行字串字面值需要用反斜槓來分行,「

\」,但必須保證該反斜槓是本行的最後乙個字元了,後面不允許注釋和空格,後繼行的任何字元都被視為字串成分,所以後繼行沒有正常的縮排。(這一點類似於用巨集定義表示乙個跨多行的函式)

左值和右值,簡單來講就是可以作為賦值運算子(等號「

=」)的左邊的是左值,在右邊的是右值。左值的深層次是具有記憶體空間的變數,例如

i++不是左值,

++i就是左值。

初始化分為直接初始化和賦值初始化兩種,

int value = 11;

這就是學習初期經常用的複製初始化。其直接初始化表示

int value(11);

內建型別的這兩種情況基本不差別,但對於類型別的物件來說,這兩者就是有著很大的差別。

對於物件的初始化細節等詳見

csdn

部落格。

宣告和定義的區別詳見

csdn

部落格。定義變數的實質是開闢空間,在乙個程式中,乙個變數只能有且僅有乙個定義。宣告通過

extern

關鍵字宣告變數而不定義,在乙個程式中,乙個變數的宣告可以有多次。

extern int value;

是標準的宣告式。但

extern int value = 11;

這就是定義了。

變數的作用域:全域性作用域,類作用域,名空間作用域,區域性作用域,塊作用域,括號作用域。

全域性作用域下的變數預設為

extern

,可被外部檔案訪問的。加上

const

後就強制成本檔案的區域性變數,不可被外部檔案訪問,這也就是為什麼標頭檔案內可以定義

const

全域性變數。要想讓其成為全域性,需要

extern。

標頭檔案中一般不用於定義,三個例外,類定義,

inline

函式,const

變數。

引用是一種復合型別,所謂復合型別就是指本型別的定義需要用到其他的型別,不能定義引用型別的引用,但可以定義任何其他型別的引用(陣列本身可以有引用,但其元素型別不能為引用,因為無法初始化)。

int &value = 11;

是錯誤的;但

const int &value = 11;

這就可以。

double dval = 3.14; const int &ri =dval;

這種跨型別的引用是可以的。編譯器在實現過程中做了一次型別轉換,中間多出了

int tempint = dval; const int &ri = tempint;

總結:非

const

引用只能繫結同型別的物件,

const

引用可以繫結不同型別的物件或右值。

每乙個定義的列舉都是一種型別,列舉被看做是編譯器常量,列舉成員的值可以不唯一。

字串字面值的常量摺疊原則:將同乙個字串字面值賦給多個變數,這些變數會有同乙個位址,在實踐中

const

和define

乙個效果,不會有任何儲存空間用於儲存

const

變數。

c primer學習筆記 1

學習筆記只為幫助自己記憶,寫的並不嚴謹,以自己理解為主.若看到此文的人,發現錯誤請指出,非常感謝.還是以main函式為入口點,可以有返回值,也可以返回值為void,檔案字尾名為cpp 以不同編譯為準 int main 即c 的擴充套件函式庫 標準庫中用於基本標準輸出和輸入的庫 先看以下兩個方法 1 ...

c primer學習筆記1

1,main函式返回值必須是int型。2,iostream庫的基礎是istream和ostream的型別 4個io物件 cin 標準輸入 cout 標準輸出 cerr 標準錯誤 clog 標準日誌 3,域操作符 4,注釋符放在雙引號內是不會被解釋成注釋的,雙引號限制了注釋符的擴充套件。5,for和w...

c primer學習筆記 1

學習筆記只為幫助自己記憶,寫的並不嚴謹,以自己理解為主.若看到此文的人,發現錯誤請指出,非常感謝.還是以main函式為入口點,可以有返回值,也可以返回值為void,檔案字尾名為cpp 以不同編譯為準 int main 即c 的擴充套件函式庫 標準庫中用於基本標準輸出和輸入的庫 先看以下兩個方法 1 ...