指標優點:
1。為函式提供修改呼叫變元的手段;
2。支援c++動態分配子程式
3。可以改善某些子程式的效率
4。為動態資料結構(如二叉樹、鍊錶)提供支援
注:指標為程式引入了一層間接性,可以操控指標而不直接操控物件。
1。可操控指標內含的位址也可操控指標所指的物件
2。指標可能並不指向任何物件,寫*pi時,可能會使程式在執行期錯誤,如定址到某個物件,則提領操作,不指向任何物件,會出錯,所以在提領前先確定它的確指向某物件.
乙個未指向任何物件的指標,內含位址為0,有時稱為null指標,assert (p != 0)可檢測是否分配成功。也可用if (pi),只有在pi含非零值時,才為true.
一、定義:
為存放記憶體位址的變數。
詮釋:
指標為一資料型別也有自己的位址。占用四個位元組的儲存空間
int * p: &p返回的是指標p的位址,而不是所指變數的位址
二、指標變數:
type * name 宣告時必須確保它的型別與要指向的物件型別相容
const 是「最靠近」為原則
指向整數常量的指標:const int * p;它所指向的值唯讀不能被修改 *p = 4(錯誤),p = 5(正確)
指向乙個整數的常量指標:int * const p;不允許修改指標變數的值,*p = 5 (正確),p = 5 (錯誤)
三、指標操作符:
*(提領操作):一元操作符,是&的補操作,返回其運算元所指變數的值
四、指標賦值及轉換:
同型別直接賦值,異型別要進行轉換。
強制轉換:可以把表示式結果硬性轉換為指定型別
char * p;(int *)p 把p強制轉換為int型,記住轉換過程中要注意兩個型別的大小,大轉小時可能會有資料丟失(如int到double)
涉及void *的:
c 中void *型別可賦值給任何型別的指標,反之亦然
c++ 中都需要強制轉換
void * 可似為無窮大能接納任何型別賦值,反之不行int * p =9;void * t= p(正確);p=t(錯誤)
不涉及void *的都要強制轉換
五、指標的算術操作
和整數的加法,減法,自身的增量、減量
指標增量後指向下乙個與指標基類同型的元素,增減單位是所指型別的長度。
六、其他說明:
1。指標和陣列:
2。函式指標:
函式具有可賦給指標的物理記憶體位址,乙個函式位址也為該函式的進入點,也是呼叫函式的位址
3。多級指標位址 **p
七、動態記憶體分配
定義:是程式在執行中取得記憶體的方法。是從堆(heap)--系統的自由記憶體區-取得記憶體
運算子:
new(c中的malloc):自動建立乙個具有合適大小的物件,返回具有正確型別的指標,如分配不成功,返回乙個空指標0,且可自動呼叫建構函式。
char * p = new char(』t』);
delete(c中的free):delect p;
釋放陣列物件時要使用方括號delete p;
八、與引用的區別
&引用運算子:
1。引用只是變數的別名,而不是指向變數的指標(區別於取址運算子"&")不佔記憶體空間,對變數引用的改變其相應的變數也會改變。
2。不能對引用使用指標間接運算子「*」進行復引用操作
3。引用必須在宣告時初始化 int &c = count;(c是count的別名)
Delphi 學習筆記 指標篇
取址運算子 var intval integer p integer new p 申請記憶體空間 intval 24 p intval 取變數 intval 的位址賦值給 整形指標,整形指標指向intval的位址 dispose p 釋放記憶體 指標的引用解析操作符 var pint integer...
C 學習筆記(1) 基礎入門篇
侵刪 1.1 注釋 1.2 變數 1.3 常量 關鍵字識別符號命名 命名要求 1.4 資料型別 1.4.1 整型 1.4.2 浮點型 1.4.3 字元型 1.4.4 字串型 1.4.5 布林型bool 1.5資料輸入 cin 變數 變數需要提前定義 1.6 運算子 1.7 程式流程結構 1.7.1 ...
《C 封裝篇(上) imooc》筆記
限定符 private protected public private是預設修飾符,protected類似於private,不同點在於繼承情況不一樣。class tv 從棧中例項化 tv tv1 tv tvarr 20 從堆中例項化 tv p new tv tv p1 new tv 20 其他操作...