C 學習筆記4 符合型別

2021-07-05 17:13:52 字數 3110 閱讀 3723

《c++ primer plus  第6版》讀書筆記

知識點:

1.c++陣列初始化 可以省略「=」

int lift[10] ;   等價 int lift[10] = ;

int lift[10] {}; //等於  

2.'s' 是83的另一種寫法。「s」 表示 s和\0  並且「s」 表示的為位址

3.鍵盤輸入讀取一行處理

cin.getline(name1, 19); 讀取一行輸入,丟棄換行符,自動結尾加空字元

cin.get(name1,19);讀取一行輸入,保留換行符,自動結尾加空字元

cin.get(); //是讀取乙個字元 可用於讀取回車

cin.get(name1,19).get(); //可用於讀取字串,並讀取回車

4.字串操作(string)

string str1, str3;

string str2 = "hello world!";

str1 = str2;

str3 = str1 + str2;

str1.size();

5.長字串

wchar_t name1 = l"hello world";

char16_t name2=u"hello world";

char32_t name3=u"hello world";

6.原始字串

cout << r"(i love you "king" to "\n" for sec)"《列印:i love you "king" to "\n" for sec

列印「(方法:

cout << r"+*(i love you "king" to "\n" for sec)+*"<7.c++不提倡使用全域性變數

8.結構體複製

struct sname1;  //初始化   如果只有{}  初始化為0

sname2 = sname1;

9.結構中的位欄位

struct sname2;   //初始化

10.作用域內列舉

enum en;

en bis;

bis = en(19); // 這是合法的, 19屬於列舉區間內  0 ~ 31。 離20最近的2的冪為32,32 -1 就是列舉的上限。下限演算法相同

11.oop強調執行階段決策,即執行時決定分配多少所需的空間。

12.給指標複製,必須強制型別轉換

int *p;

p = (int *)0xb8000000;

13.指標與變數的大小

double *pn = new double;    //double 為8位元組

*pn = 0.0001

sizeof(pn), sizeof(*pn).

列印: 4   8

14.new 分配的空間是堆,這點顯而易見。new 和 delete 成對出現

15.陣列分配空間

int *p = new int[20];

delete p;

16.delete 不應對乙個指標釋放兩次,對空指標delete兩次是安全的

17.指標和陣列等價

int *p = new int[20];

p[3] = 5;

p = p +1;  //p指向第二個元素,指標位址增加了4個位元組,指標會根據指標型別的長度增加位址

delete p;

18.陣列名與指標

short tell[10];

cout << tell << endl;//陣列名為第乙個元素的位址

cout << &tell << endl;//陣列名取位址是整個陣列的位址

//雖然位址相同,但是+1的結果不同,

cout << tell + 1 << endl;//陣列名為第乙個元素的位址,加兩個位元組

cout << &tell + 1<< endl;//陣列名取位址是整個陣列的位址,加20個位元組

//tell 等價於 &tell[0]  這是乙個兩位元組的記憶體位址, tell+1 位址值加2. tell是乙個 short * 指標

//&tell 是乙個20位元組的記憶體位址  &tell +1 位址值加20。&tell 是 short (*)[10]陣列。

//初始化指標 short (*pas)[20] = &tell  //括號不能省略,不然pas先與[20]結合,變成指標陣列,包含20個元素。

//(*psa)[0] 第乙個元素

20.cout 會列印指標位址,但如果指標是 char * 則會列印指標指向的字串,需要強制轉換來列印char *的位址 (int *)

21.自動儲存的變數放到棧(後進先出lifo)中,反向被釋放。棧將不斷變大和縮小。

22.指標的指標,陣列與指標

#include "stdafx.h"

#include struct times

;int _tmain(int argc, _tchar* argv)

; //指標陣列,每一位存乙個指標

(ppd[1])->year = 2002;

cout << "s2.year = " << s2.year << endl;

//陣列的指標,ppd是乙個陣列的名稱,因此ppd是陣列第乙個元素的位址

//第乙個元素又是指標,那麼ppa是乙個指標,指向time的指標。

const times **ppa = ppd;

auto arp = ppd; //c++11的寫法更簡潔

//*ppa 是乙個結構指標,ppa指向ppd第乙個元素,因此*ppa是第乙個元素,即&s1

//(*ppa)->year 是s1的成員year ,括號不能少,因為 ppa->year不是指標 不能*(ppa->year)

cout << "ppa = " << (*ppa)->year << endl;

cout << "arp = " << (*(arp+1))->year << endl;

return 0;

}

23.vector 堆分配空間,靈活但效率低。array 棧分配空間,固定長度,相比陣列安全高效。

vectora;

arraya;

24.陣列和指標關係緊密,如果ar是陣列名, ar[1] 等效 *(ar+1)

C 學習筆記4 C 之bool型別

c 中的bool型別 c 在c語言的基本型別系統上增加了bool型別 c 中的bool可取的值只有true與false 理論上bool值佔乙個位元組 如果多個bool值定義在一起,可能各佔乙個bit,這取決於編譯器的實現 true代表真值,編譯器內部用1來表示 false代表非真值,編譯器內部用0來...

C 學習筆記 4

17 函式呼叫方式 stdcall 表示指定這個函式採用 stdcall 方式。這種呼叫方式有如下特徵 1 呼叫時,引數從右到左壓入堆疊。2 被呼叫的函式負責清除堆疊。3 編譯時函式名前加 在函式名後加 paralength 其中 paralength 為所有引數以位元組為單位的長度。如果不指定函式...

c 學習筆記4

toc 主要內容為以下兩部分 1.布林資料型別 2.列表初始化 部分 這個資料型別在不同語言裡面的表現方式是不一樣的,尤其在c語言和c 裡布林資料型別表現方式有很大區別。布林表示式 布林表示式的本質是一段 其結果為 真 true 或者 假 false 我們可以通過關係運算得到布林值,關係運算 rel...