使用new申請記憶體,使用delete釋放記憶體。
//c++:
int *p = new
int;
delete p;
int *arr = new
int[100]; //申請塊記憶體
delete arr;
//如果寫成delete arr,則只能刪除第乙個記憶體,後面99個記憶體還在。
//c語言:
void *malloc(size_t size); //申請記憶體
void
free(void *memblock); //釋放記憶體
申請和釋放記憶體配套,不可混用。
2. 申請記憶體需要判斷是否成功
int *p = new
int;
if(null == p)
使用const比巨集定義define好,因為編譯時const會檢查變數型別,不易出錯。
另外:
const
int *p;
intconst *p; //二者等價
下面記錄c++primer中提到的乙個問題:
假設給出以下語句:
typedef
string *pstring;
const pstring cstr;
請問cstr變數是什麼型別?
答案是const string型別的指標。
那const pstring指標所表示的真實型別是什麼?
const修飾的是pstring,而pstring是乙個指標,所以等價為:
string *const cstr; //指向string型別物件的const指標
//下面這個等價是錯誤的
const
string *cstr;
int a = 3;
int &b = a;
b = 10; //b是a的別名,改變b相當於改變a
別名和指標的比較引用和指標都可以間接訪問另乙個值,但是它們之間有兩個重要區別:
定義引用時必須初始化,而指標初始化不是必要的(但是注意,未初始化的指標不要用於解引用*,即不要對該指標進行存、取值等操作)
給引用賦值修改的是與該引用關聯的物件的值,而不是該引用與另乙個物件的關聯,引用一旦初始化就始終指向特定的物件。
//指標賦值
int ival = 1024,ival2 = 2048;
int *pi = &ival, *pi2 = &ival2;
pi = pi2; //指標pi指向了ival2
//引用賦值
int &r1 = ival, &r2 = ival2;
r1 = r2; //引用關聯的物件沒變,ival的值變成了ival2的值
C 學習筆記1 const引用
const引用可以用不同型別的物件初始化 只要能從一種型別轉換到另一種型別即可 也可以是不可定址的值,如文字常量,例如 同樣的初始化對於非const引用是不合法的,將導致編譯錯誤。原因如下。引用在內部存放的是乙個物件的位址,它是該物件的別名。對於不可定址的值,如文字常量,以及不同型別的物件,編譯器為...
C 引用 const 引用
通過引用修改它指向變數的值 也就是說 通過修改 b 達到修改 a 的目的,也可以修改a int a 5 int b a b 40 int c b 此時a b c 40 例項1 宣告 double getarea int num 呼叫 double area this getarea 30 1 將30...
C 引用與const引用
1 在實際的程式中,引用主要被用做函式的形式引數 通常將類物件傳遞給乙個函式.引用必須初始化.但是用物件的位址初始化引用是錯誤的,我們可以定義乙個指標引用.1int ival 1092 2 int re ival ok 3int re2 ival 錯誤 4int pi ival 5int pi2 p...