c primer 第五版 第二章 學習筆記

2021-08-26 20:33:51 字數 3931 閱讀 2323

long和int一般有一樣的尺寸,如果你的數字式超過了int的表示範圍,選用long long

注意char在不同編譯器型別了可能不同,有時有符號,有時候預設無符號

執行浮點數最好用double.事實上,對於某些機器來說,雙精度運算甚至比單精度快。

long double提供的精度在一般情況下是沒有必要的,況且他的執行時耗也不容忽視

bool:非零即真()

bool ->(賦給)非bool(結果:false ->0;true->1)

非bool->(賦給)bool(結果:0->false;非零即真->true) 

整數 ->  浮點型別      (結果:只保留小數點前的部分)

浮點型別 ->  整數      (結果:小數部分記為0,若該整數空間超過浮點型別,則精度有損)

賦給->   無符號型別乙個超出其表示範圍時     (結果:是初始值對無符號型別表示在、數值總數取模後的餘數)

例如:可以編譯器自己測試一下:

1.當乙個算數表示式中既有無符號又有int型時,那個int值就會轉換為無符號數

注意:切記混用無符號和有符號型別

2.注意:當從乙個無符號數中減去乙個值時,不管這個值是不是無符號數,我們都必須確保結果不能是乙個負值

例如如下:     就陷入了乙個死迴圈!!!!可以用while來代替避免這種結果(要很清楚這兩者的執行過程)     

for(unsigned i = 10;i>=0;--i)

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

字面值常量:一眼能看見的值

注意   "a" 和  'a'   是不同的

物件:一塊能儲存資料並具有某種型別的記憶體空間

初始化     和  賦值  的區別?

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

列表初始化      預設初始化?

內建型別初始化  :如果使用列表初始化且初始值存在丟失資訊的風險,則編譯器報錯

什麼是內建型別?

如果內建型別的變數未被顯示初始化,它的值由定義的位置決定。定義於任何函式體之外的變數被初始化為0;

定義在函式體內部的內建型別的量將不被初始化。未定義的,如果試圖拷貝或以其他形式訪問此型別值將引發錯誤。

2.變數宣告和定義的關係

宣告使得名字為程式所知;

定義負責建立與名字關聯的實體;定義還申請儲存空間,也可能會為變數付乙個初值

如果想宣告乙個變數而非定義它,就在變數名前加extern ;

任何包含了顯示初始化的宣告即成為定義,給由extern關鍵字標記的變數附乙個初始值,但這也抵消了extern的作用

變數能且只能被定義一次,但是可以被多次宣告

3.c++是一種靜態型別語言。其含義是在編譯階段檢查型別

4.識別符號

1.使用者自定義的識別符號中不能連續出現兩個下劃線;也不能以下劃線連著大寫字母;此外,定義在函式體外的識別符號不能以下劃線開頭;識別符號長度沒有限制;

2.變數命名規範:體現實際含義;一般用小寫字母;類名大寫字母開頭;多個單詞組成用下劃線連線

5.名字的作用域

1.同乙個名字在不同的作用域可能指向不同的實體。名字的有效區域始於名字的宣告語句

2.第一次使用時再定義它

3,作用域能彼此包含;允許在內層作用域中重新定義外層作用域已有的名字

如果函式有可能用到全域性變數,則不宜再定義乙個同名的區域性變數

6.復合型別

7.引用

1.一般是指左值引用,引用必須被初始化,引用型別的初始值必須是乙個物件(引用只能繫結到物件上,不能與字面值)

2.程式吧引用和他的初始值繫結在一起,而不是將初始值拷貝給引用

3.引用即別名  :引用並非物件,相反,他只是為乙個已經存在的物件所起的另外乙個名字

4.定義了乙個引用後,對其進行的所有操作都是在與之繫結的物件上進行的

8.指標:

指標本身就是乙個物件;無需在定義時賦初值;在快作用域內定義的指標如果沒有初始化,也將可能是不確定的值

指標存放的是物件的位址

指標四種狀態:

試圖拷貝或以其他方式訪問無效指標的值都將引發錯誤

利用指標訪問物件,修改*p的值就是修改p所指物件的值

空指標:可以直接給指標字面值為0來賦為空,也可直接賦為null,其實null的值就是為0,但不能直接給指標賦乙個變數,      哪怕是整型且值為0也不可

9.void*指標

1.可以存放任意物件的位址

2.不能直接操作void*指標所指的物件

3.以void*的視角來看記憶體空間也就僅僅是記憶體空間,沒辦法訪問記憶體空間中所存在的物件

10.理解復合型別的宣告

易錯點:int*  p1,p2;//這會造成一種錯覺,好像這條語句中所有變數都是int*,其實int*僅僅修飾了p1,所有變數公用的只是int而已

指向指標的指標:二級指標

重要:引用本身不是乙個物件,因此不能定義指向引用的指標;但指標是物件,所以存在對指標的引用

int i = 42;

int *p;

int *&r = p;//*說明r引用的是乙個指標

r = &i;

*r = 0;

11.const限定符1.const物件一旦建立後其值就不能再改變,所以const物件必須初始化

2,const主要的限制就是只能在const型別的物件上執行不改變其內容的操作

1.指向常量的指標:同常量的引用類似:不能用於改變其所指物件的值 ;

int i= 5;

int const * p = &i;

2.指標的型別必須與其所指物件的型別一致,但有例外:允許零乙個指向常量的指標指向乙個非常量指標

(所謂指向常量的指標僅僅要求不能通過該指標改變物件的值,但沒有規定哪個物件的值不能通過其他路徑改變(這點同            常量的引用是一樣的 ))

2.const指標:

常量指標:

必須初始化,存放在指標中的位址就不能改變

例如:int i = 0;

int * const p = &i; //p將一直指向i

指標本身是乙個常量並不意味著不能通過指標修改其所指物件的值  ,取決於所指物件的型別

3.頂層const:

頂層const:表示指標本身是個常量,本身不可以被改變

底層const:   表示指標所指的物件是乙個常量(用於宣告引用的const都是底層const)

執行物件的拷貝操作時,常量是頂層還是底層區別明顯!!!

其中,頂層const不受什麼影響

如果我們把int的尺寸看做成是乙個確定不變的已知值,那麼這樣的程式就稱作是不可移植的

混合運算中的型別轉換問題:

如何學習C primer 第五版

c primer 第一次可以跳著看。關鍵是要盡快用起來,在使用中熟練,而不是在細節中迷失。以c primer第五版為例,第一遍讀的時候 part1也就是前七章,除了6.6,6.7節,都要通讀。尤其是第三章初步介紹了vector和string,簡直就是新手福音,搞定這兩個容器就能寫一些簡單的程式。pa...

c primer 第五版課後習題 第五章

第五章主要講了函式 include include include include using namespace std void test 5 9 std cout 母音字母個數為 t cnt endl void test 5 10 std cout 母音字母a的個數為 t cnt a endl...

C Primer第五版 第五章 程式設計題

5.9 編寫一段程式,使用一系列if語句統計從cin讀入的文字中有多少母音字母。include void main std cout a acnt std endl std cout e ecnt std endl std cout i icnt std endl std cout o ocnt s...