C 學習第4章 復合型別

2021-06-22 18:26:31 字數 3204 閱讀 8582

知識點:

4.1 陣列

1. 如果將sizeof()用於陣列,將獲得整個陣列的位元組數。

2. 不能將乙個陣列賦給另乙個陣列。

4.2 字串

1. 字串常量(雙引號)不能和字元常量(單引號)互換。

4.3 string類

1. string類物件可以賦值、拼接和附加。

2. string類具有自動調整大小的功能。

3. c++11新增另一種字串--原始字串(raw),用        "()"        作為定界符,使用字首r來標識。

eg:    cout<4.4 結構簡介

1. 結構初始化時,使用逗號分隔值列表  例如  inflatable duck = {「daphne」,0.12,9.98};

2. c++11 不允許縮窄轉換。

4.5 共用體

1. 只能儲存 int、long、double

2. 共用體長度為其成員最大長度

4.6 列舉

4.7 指標和自由儲存空間

2. 宣告指標必須指定指向的資料的型別。

3. !一定要在對指標使用解除引用運算子(*)之前,將指標初始化為乙個確定的、適當的位址。

4. 如果要將數字作為位址來使用,應通過強制轉換將數字轉換為合適的位址型別。 int * pt; pt = (int *) 0xb800000;

5. new分配記憶體是在程式執行時進行的,不是在編譯時。int * pnt = new int; 程式設計師要告訴new需要為哪類資料分配記憶體;new將找到這樣長度的記憶體塊,

並返回該位址。程式設計師的責任是將該位址賦給乙個指標。

不要建立兩個指向同一塊記憶體的指標,這將增加 錯誤的刪除同乙個記憶體塊兩次的 可能性。

int * ps = new int;

int * pq = ps;  // don『t do this

6. delete 能夠將使用完的記憶體歸還給記憶體池。使用時後面要加上指向記憶體塊的指標(這些記憶體塊是最初用new分配的);

int * ps = new int;

delete ps;   這將釋放ps指向的記憶體,但不會刪除指標ps本身,可以將ps重新指向其他的記憶體塊。

一定要配對的使用new 和 delete,否則將發生記憶體洩漏。

不能嘗試釋放已經釋放的記憶體塊,只能用來釋放new分配的記憶體。不能用delete 釋放宣告變數所獲得的記憶體。

7. 使用建立動態陣列

int *psome = new int [10];  //動態聯編_陣列是在執行時建立,靜態聯編_必須在編寫程式時指定陣列的長度

delete [ ] psome; // 別忘了[ ]

4.8 指標、陣列和指標算術

1. 將指標變數加1後,其增加的值等於指向的型別占用的位元組數。  *(stacks+1)等價於 stacks[1]  語法糖。

2. 指標名和陣列名很相似,陣列名常用作第乙個元素位址,二者區別之處有一、 指標的值可以修改但是陣列名不可以 二、sizeof陣列名得到陣列長度,而sizeof指標得到的是指標長度(4個位元組)

3. 對陣列名應用位址運算子&得到的是整個陣列的位址,而不是陣列裡首元素的位址。即 &tell[0] 不等於 &tell。tell+1是位址加單位型別長度,而&tell+1 是以整個陣列為單位,跳過整個陣列;

4. 如果給cout提供乙個字元的位址,則它將從該字元開始列印,直到遇到空字元為止。

5. 如果要顯示的是字串的位址,則必須將這種指標強制轉換為另一種指標型別,如 int *

6. strcpy(obj, src); strncpy(obj, src, 最大字元數), 應使用這兩個函式,而不是賦值運算子將 字串 賦給 陣列。

7. 使用new建立動態結構   箭頭成員運算子 -> ;如果結構標識是結構名,則使用句點運算子,如果識別符號是指向結構的指標,則使用箭頭運算子。

4.12 複習題

1.   char actor[30]; short betsie[100]; float chuck[13]; long doble dipsea[64];

2.  arrayactor; arraybetsie; arraychuck; 

3. int a[5] = ;

4. int even = a[0]+a[4];

5. printf("ideas中的第二個元素為:%f", ideas[1]);

6. char str[13] = "cheeseburger";

7. string str = "waldorf salad";

8. struct fish

char kind[20];

int weight;

float length;

9. fish fish_a = ;

11. double ted; double * pp = &ted; cout << *pp<12. float treacle[10] = ; float * pp = treacle; cout<13. 

cinvectora(n);

14. yes. print the string.

15.  fish * pf = new fish; pf->name;

16. 只能讀取乙個單詞,遇到空格就停止。

17.  const int n =10; 

vectorstr (n);

4.13 程式設計訓練

3. #include

#include

using namespace std;

void main()

char f_name[20];

char l_name[20];

cin>>f_name>>endl;

cout<<"enter your first name:">l_name>>endl;

cout<<"enter your last name:"strcpy(pp, f_name);

strcpy(pp, 「, 」);

strcat(pp,l_name);

cout<<"here is the information in a single string:"<<  *ppreturn 0;

第4章 復合型別

第 4 章 復合型別 一 陣列 潛規則 只有在定義陣列時才能使用初始化。不能將乙個陣列賦給另乙個陣列。如果初始化為,則表示第乙個元素被設定為1,其他元素被設定為0。二 字串 注意要點 在確定儲存字串所需的最短陣列時,記得將結尾的空字元計算在內。如果要顯示部分字串,只需將需要的字串的結尾標記為 0 每...

C primer plus 第4章 復合型別

1.陣列初始化 2.字串 兩種方式 c 風格字串 以 0結尾 string類庫 單引號表示字元常量 a 是字串編碼的簡寫,char a a 是正確的。但是 a 表示的是兩個字元a和 0組成的字串,實際上 a 表示的是字串所在的記憶體位址,因此char a a 是非法的 1 cin.getline a...

C plus6th 第4章 復合型別

第一種方法 int year cin year cin.get or cin.get ch char name 10 cin.getline name,10 第二種方法 int year cin year get or cin year get ch char name 10 cin.getline...