C 學習筆記 一 記憶體 引用 const

2021-07-31 15:55:47 字數 1474 閱讀 3285

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