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