初始化不同於賦值,初始化是建立變數並臨時賦予其乙個初始值,而賦值是把物件當前值擦除,而以乙個新值來替代。 -------《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型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...