C primer學習筆記 p39 p54

2021-10-14 04:18:37 字數 3887 閱讀 7307

初始化不同於賦值,初始化是建立變數並臨時賦予其乙個初始值,而賦值是把物件當前值擦除,而以乙個新值來替代。     -------《c++ primer 第五版》 p39

定義在函式體內的內建型別物件如果沒有初始化,則其值為定義。類的物件如果沒有顯式的初始化,則其值由類決定。  -------《c++ primer 第五版》 p40

**1.1 定義在函式體內的內建型別沒有初始化

#include using namespace std;

void print()

int main()

執行結果:

注意:此處的值並不是固定的,而是隨機生成的。

**1.2 定義在函式體內外的內建型別沒有初始化

#include using namespace std;

int num_int;

double num_double;

char num_char;

void print()

int main()

執行結果:

**:main函式內的值會初始化預設值嗎?

測試後結果:main函式也屬於函式,所以不會初始化,其值為定義。

宣告不等同於定義,宣告只是使得名字被程式所知,而定義還會申請儲存空間,也可能會位為變數賦乙個初始值。且變數能且只能被定義一次,但是可以被多次宣告。     -------《c++ primer 第五版》 p41

**2.1 多次宣告

#include #include "head.h"

using namespace std;

extern int ext;

extern int ext;

extern int ext;

extern int ext;

extern int ext;

int main()

c++允許在內層作用域定義外層作用域已有的名字。    -------《c++ primer 第五版》 p44

**3.1 內層作用域定義外層作用域已有的名字

#include using namespace std;

int result = 3;

int main()

執行結果:

可以看出內層作用域的值覆蓋了外層作用域,也就是區域性變數覆蓋了全域性變數。

**3.1 使用「 :: 」取得全域性變數的值

#include using namespace std;

int result = 3;

int main()

執行結果:

注:在for迴圈體上定義的變數屬於for作用域,例如如下**執行結果是10。

#include using namespace std;

int result = 3;

int main()

cout << i;

return 0;

}

引用必須被初始化。  -------《c++ primer 第五版》 p45

引用在記憶體上如下圖所示:

int lvalue = 10;

int lvalue_reference = &lvalue;

引用型別的初始值必須是物件。   -------《c++ primer 第五版》 p46

下圖寫法就是錯的:

引用本身並不是乙個物件,一旦定義了引用,就無法解綁再去繫結另乙個物件。   -------《c++ primer 第五版》 p49

void*指標可以用於存放任意物件的位址。    -------《c++ primer 第五版》 p50

#include using namespace std;

int main()

#include using namespace std;

int main()

可以通過static_case轉換使得void*型別訪問到物件,這裡只做演示,不深究,**如下:

#include using namespace std;

int main()

執行結果:

const修飾的變數必須初始化

預設情況下const物件僅在檔案內有效     -------《c++ primer 第五版》 p54

對於上面的const物件僅在檔案內有效,一開始測試錯誤,以為是書上寫錯了,後來用了正確的測試方法,驗證了書上的說法。

錯誤測試:

head.h

#ifndef head_h

#define head_h

const int con = 10;

#endif

main.cpp

#include #include "head.h"

using namespace std;

int main()

執行結果:

結果驚人的發現在main檔案中居然可以使用con,以為是書上寫錯了,或者是編譯器問題,後來仔細思考發現,main.h中使用了#include "head.h" 這個語句其實以及將head檔案包含進了main檔案,如果將這句刪除,那麼程式就會報錯。

**6.1 刪除include語句

#include using namespace std;

int main()

執行結果:

[error] 'con' was not declared in this scope

這時候按著書上的使用extern修飾來測試。

正確測試:

head.h

#ifndef head_h

#define head_h

extern const int con;

#endif

head.cpp

#include "head.h"

extern const int con = 10;

main.cpp,不include標頭檔案,只宣告。

#include using namespace std;

extern const int con;

int main()

執行結果:

這個實驗使得我對extern和const的作用又有了深入的理解。

SICP學習筆記 P27 P28

函式f如下定義 如果n 3,那麼f n n 否則f n f n 1 2 f n 2 3 f n 3 寫出乙個遞迴和乙個迭代求這個問題.遞迴 define f n if n 3 n f n 1 2 f n 2 3 f n 3 迭代 define f n if n 3 n f iter 2 1 0 n ...

CSAPP 書本P39 練習2 13

練習2.13 20世紀70年代末至80年代末,digitalequipment的vax計算機是一種非常流行的機型。它沒有布林運算and和or指令,僅僅有bis 位設定 和bic 位清除 這兩種指令。兩種指令的輸入都是乙個資料字x和乙個掩碼字m。他們生成乙個結果z。z是有依據掩碼m的位來改動x的位得到...

C Primer學習筆記

學習完乙個知識點後寫上自己的理解。算是總結吧,加深一下自己的印象,也可以在以後複習的時候方便檢視 加油加油!14.1關於運算子的過載 存在的意義 目前看來就是因為操作符大部分是針對資料的,比如int型,char型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...