c primer 第四版 學習札記 9 25

2021-04-01 19:58:50 字數 2025 閱讀 6909

1、21 % -5;  //  machine-dependent: result is 1 or -4

21 / -5;  //  machine-dependent: result -4 or -5

在%和/這兩種操作中,如果僅有乙個運算元是負數,則要根據不同機器來判斷,拿/來說,如果結果的符號同分母,那麼結果截斷就靠近負無窮,而如果結果符號同分子,則結果截斷後就靠近0。

2、如果在程式中這麼寫:

if (i < j < k)

那麼會先計算i < k,然後返回乙個bool型和k比較,結果就是oops!

3、位運算子:&,|,^

&:如果兩個運算元都是1,那麼結果就為1,否則結果均為0

|:只要運算元中有1,那麼結果就是1,否則結果為0

^:只要操作書不同時為1,那麼結果就是1,否則為0

要注意的是,不要和邏輯與和邏輯或混淆,位元算與和或是不同的

4、看了下面的兩個例子就知道,直接使用位運算子和bitset的區別了,和使用c-style字串與string的區別差不多:

bitset_quiz1.reset(27);   // student number 27 failed

int_quiz1 &= ~(1ul<<27);  // student number 27 failed

bitset的方式很容易懂,但是,用底層位運算子呢?先將乙個值為1的unsigned long用《運算子左移27位,就相當於乙個32bit的整數,它的第27bit為1,然後再取反,再和int_quiz1和,最後才得到想要的結果(好辛苦啊~~)

5、cout << 10 < 42;   // error: attempt to compare cout to 42!

《操作符優先順序比邏輯運算子高,所以,以上的例子是將cout同42做比較。。。

if (42 = i)   // . . .

if (i = 42)   // . . .

雖然vc的編譯器會給出警告,但是如果編譯器不提供,後乙個語句都是可以通過編譯的,如果從pascal轉到c++的程式設計師就容易犯這樣的錯誤,將賦值當作==用,而如果寫成第一種,如果是==可以通過編譯,而賦值就不可以,所以可以避免一些低階錯誤的發生。

7、書中給出乙個建議:

對於++和--,當需要的時候才使用字尾的方式(i++)。出於對效能的考慮,i++會造成除了要儲存增加後的版本還要儲存未增加的版本以便使用,這樣就有不必要的開銷。所以,書中推薦使用字首模式(++i)

8、(*p).foo; p是乙個類的指標,在使用的時候還要對p進行dereference,而且很容易把()忘記,所以c/c++提供了-〉,這樣看起來更簡潔些:p->foo;

9、ex5_23

int x[10];   int *p = x;

cout << sizeof(x)/sizeof(*x) << endl;

cout << sizeof(p)/sizeof(*p) << endl;

結果是:101

因為x是乙個陣列名,sizeof返回乙個陣列的大小,而*p僅返回乙個int型指標的大小

10、// oops! language does not define order of evaluation

if (ia[index++] < ia[index])

結果是:

if (ia[0] < ia[0]) // execution if rhs is evaluated first

if (ia[0] < ia[1]) // execution if lhs is evaluated first

又是根據編譯器決定的,不說什麼了,不用就是了,避免這樣模稜兩可的語句

避免這些複雜問題的方法:

(1)使用括號

(2)避免在同乙個語句中改變運算元後又使用它(有例外)

所以,以上的例子應該這樣做:

if (ia[index] < ia[index + 1])

++index;

---end--- next: 5.11. the new and delete expressions

time:05-9-26 0:22am

c primer 第四版 學習札記 9 24

1 ex4 22 const char cp hello int cnt while cp while cp 解釋兩個迴圈的不同 我的理解是第乙個迴圈是判斷cp指標是否為空作為迴圈條件的,而 cp的操作並不會讓cp為空,所以迴圈會持續進行,直到出錯 也許會是個大錯誤,因為都不知道會訪問到記憶體的何處...

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 ...