C 學習系列筆記(二)

2021-09-30 20:59:59 字數 2033 閱讀 3980

10、指標

#includeusing namespace std;

int main()

使用解除引用運算子(星號)訪問指向的資料,如:

*pinteger#訪問資料

將sizeof()用於指標時,結果與指標指向的變數型別無關,而是取決於使用的編譯器和針對的作業系統。

動態記憶體分配

使用new來動態的分配新的記憶體塊。如果成功,new將返回指向乙個指標,指向分配的記憶體;需要指定要為哪種資料型別分配記憶體。

type* pointer = new type;#type為型別

還可以指定為多少個元素分配記憶體

type* pointer = new type[numelements]

例如:int* pointer = new int[10];

使用new分配的記憶體最終都需要使用對應的delete進行釋放

delete pointer;

delete pointer

ps: delete只能釋放new建立的記憶體,而不是用於包含任何位址的記憶體。

將指標遞增或遞減時,其包含的位址將增加或減少指向的資料型別的sizeof(並不一定是1位元組)。這樣,編譯器將確保指標不會指向資料的中間或末尾,而只會指向資料的開頭。如下:

type* ptype = address;

則執行++ptype後,ptype將包含指向address+sizeof(type)

示例**如下:

#includeusing namespace std;

int main()

cout << "displaying all numbers input:" << endl;

for (int index = 0, int* pcopy = pnumbers; index < inputnums; ++index)

delete pnumbers;

return 0;

}

將關鍵字const用於指標
int hoursinday = 24;

const int* pinteger = & hoursinday

②指標包含的位址是常量,不能修改,但可以修改指標指向的資料

int  hoursinday  =24;

int* const pinteger = & hoursinday

③指標包含的位址及它指向的值都是常量,不能修改

int  hoursinday  = 24;

const int* const pinteger = & hoursinday

務必初始化指標變數,如果不能將指標初始化為new返回的有效位址或它有效變數,可將其初始化為null。

檢查使用new發出的分配請求是否得到滿足

c++提供了兩種確保指標有效的方法,預設方法是使用異常,即如果記憶體分配失敗,將引發std::bad_alloc異常。這將導致應用程式中斷執行。異常處理有以下兩種方法:

//第一種

#includeusing namespace std;

int main()

catch (bad_alloc)

return 0;

}

//第二種

#includeusing namespace std;

int main()

else

cout << "memory allocation failed" << endl;

return 0;

}

c 學習筆記系列 二

由於最近在上專案吧,時間比較緊張,所以也就沒有太多時間來及時更新部落格了。但是我會吧c 學習筆記系列給寫下去。說實在話,我也在考慮該如何寫這個話題?原因是c 太大了,包含的東西太廣太深,隨便乙個知識點都足夠讓人折騰一陣子了,然而這些知識都是可以在網上搜尋到的。所以我決定換一種方式以問答的形式來體現。...

WebService學習筆記系列(二)

通過我們傳送的內容那一欄我們可以看到傳送的資料,就是那一串xml資料,既然拿到了xml資料,我們就可以使用應用程式傳送乙個xml字串,看是否能夠呼叫服務端的資料 服務端的 webservice學習筆記系列 一 我們這裡只說客戶端呼叫。public class mytest2 system.out.p...

C 學習筆記系列(一)

第一章 1 在c 中,可不顯示地指定變數型別,使用關鍵字auto 例如 auto flag true。這裡將指定變數flag的型別交給了編譯器,編譯器會自動確定變數應為什麼型別。ps auto時必須將變數初始化,否則會出現編譯錯誤。2 使用enum來定義變數只有一組特定的取值 例如 enum rai...