c primer 第四版 學習札記 9 24

2021-04-01 19:53:31 字數 2124 閱讀 1562

1、ex4_22:

const char *cp = "hello";

int cnt;

while (cp)

while (*cp)

解釋兩個迴圈的不同

我的理解是第乙個迴圈是判斷cp指標是否為空作為迴圈條件的,而++cp的操作並不會讓cp為空,所以迴圈會持續進行,直到出錯(也許會是個大錯誤,因為都不知道會訪問到記憶體的何處)。第二個迴圈是判斷*cp這個字元是否為空,而隨著++cp的操作,cp最終會指向"/0"而結束迴圈。(ps:lippman出的題也有點小bug,整數沒有初始化)

2、電子書中的一處錯誤:

section 4.3中的initializing a dynamically allocated array的乙個例子:

int *pia2 = new int[10] (); // array of 10 uninitialized ints

注釋應該是// array of 10 initialized ints

3、常數動態分配陣列必須被初始化:

const int *pci_ok = new const int[100]();

但是感覺由於必須初始化,而初始化後卻又改變不了其數值,沒有什麼實際用途。

4、int* p = new int[n];使用這樣的方式可以得到乙個在執行時得到陣列range的動態陣列,n可以為0,但是我們並不能直接宣告乙個range為0的靜態陣列,同時,這樣的動態陣列指標p不能被解引用(dereference),p為乙個合法的、非零指標

5、就如effective c++中所說的,有new就必須有delete,用delete pia;的方式來收拾動態陣列占用的記憶體。如果沒有,編譯不會出錯,但是,會在執行的時候,程式可能崩潰,同時造成了記憶體洩露。

6、 int dimension = strlen(errortxt) + 1;

char *errmsg = new char[dimension];

不要忘記,strlen返回的是字串不包括"/0"的長度,而動態分配空間的時候,必須考慮進去,所以要+1

7、一般情況來說,string的效率要比c-style的string高,所以,作者推薦,如果不為相容性考慮,首選string

8、處於相容c的考慮,c++很容易將c-style的字串轉為string,但是直接反向轉換就不可,可以通過這種方式:

const char *str = st2.c_str();

注意一點,const,c_str()返回的是const,所以這樣得到的只能讀,不能改變。如果要很好的使用,最好將返回的const字串拷貝乙份再使用

9、可以使用陣列來初始化乙個vector:

const size_t arr_size = 6;

int int_arr[arr_size] = ;

// ivec has 6 elements: each a copy of the corresponding element in int_arr

vectorivec(int_arr, int_arr + arr_size);

要注意的是,這裡的建構函式兩個引數都是指標,在上面的例子中,分別指向陣列的第乙個元素以及最後乙個元素。但是範圍是第乙個指標指向的元素以及第二個指標指向的元素的前乙個元素。(共六個)

vectorivec(int_arr + 1, int_arr + 4);

則表示使用陣列的第二個元素到第五個元素的前乙個對vector進行初始化。(總共三個元素)

10、int *ip[4]; // array of pointers to int

有四個元素的指標陣列,指向int

int (*ip)[4]; // pointer to an array of 4 ints

指向乙個4個元素的int陣列的指標

so confuse...

11、typedef int int_array[4];

int_array *ip = ia;

使用typedef可以增加可讀性,不過對typedef了解不多,形式有點怪怪的。總覺得這樣才對:

typedef int[4] int_array;(純屬我的想法,錯誤的!)

第四章結束(要加油了,太慢了)

---end--- next: chapter 5 expression time:05-9-25 1:12am

c primer 第四版 學習札記 9 25

1 21 5 machine dependent result is 1 or 4 21 5 machine dependent result 4 or 5 在 和 這兩種操作中,如果僅有乙個運算元是負數,則要根據不同機器來判斷,拿 來說,如果結果的符號同分母,那麼結果截斷就靠近負無窮,而如果結果符...

c primer大綱(第四版)

第1章 快速入門 第一部分 基本語言 第2章 變數和基本型別 第3章 標準庫型別 第4章 陣列和指標 第5章 表示式 第6章 語句 第7章 函式 第8章 標準io庫 第二部分 容器和演算法 第9章 順序容器 第10章 關聯容器 第11章 泛型演算法 第三部分 類和資料抽象 第12章 類 第13章 複...

4 18 c primer 第四版 練習

編寫程式 使用指標把乙個int型陣列的所有元素設定為0 include using std begin using std end using std cout using std endl int main for int pbeg begin arr pbeg end arr pbeg for ...