繼續Delphi的學習之旅, 廢話不多說,直接貼代碼。
{ Delphi基本語法 1、對象 2、指針 3、類型別名 和 類型轉換 } program DelphiObject; {$APPTYPE CONSOLE} uses SysUtils; type { 對象 1、對象通過關鍵字 class定義 2、對象可以看成是帶函數或者過程的記錄 3、對象通過 . 號引用對象的成員 4、這裡簡單的介紹一下對象,後面專門論述對象 } TClass = class className:string; end; { 指針 1、Delphi中的通用指針類型為 Pointer 2、指針可以通過Type 和 ^ 來定義一個新的數據類型 } //定義一個指針數據類型 PInt; PInt = ^Integer; { 類型別名 1、Delphi中的類型別名類似於C語言中的typedef 2、通過關鍵字 type 定義類型別名 3、語法格式為 type 類型別名 = 原類型名; 4、強類型別名, 強類型別名將生成一種新的數據類型,與代表的原類型不是 一種類型,語法格式如下 type 強類型別名 = type 原類型名 5、強類型別名和原類型在函數或者過程的 Out 或 In 參數中是不同的類型,這 需要注意,其他時候是賦值兼容的。 } stronglyTypeInt = type integer; var //定義指針變量 pIntTest:PInt; PIntTest1:PInt; varInt:integer; pointerStr:string; { 無類型指針 1、無類型指針通過 pointer 來定義 } pointerNoType : Pointer; //定義強類型別名變量 varStronglyInt:stronglyTypeInt; begin { 指針操作 1、New()函數分配新的內存空間,然後通過Dispose()釋放申請的空間 2、指針賦值給指針 3、指針指向變量,通過 @ 操作符完成 4、引用指針變量指向的對象的值, 通過 ^ 運算符完成 5、new()函數/Dispose()函數分配的指針,又稱為動態指針,可以根據數據類型 自動確定內存空間大小 6、GetMem()函數/FreeMem()函數也能動態分配,但是不能自動確定大小,需要手動 指定大小 } // New()函數申請指針 New(pIntTest); pointerStr := Format('%p',[pIntTest]); writeln(pointerStr); //指針變量賦值給指針變量 pIntTest1 := pIntTest; //通過Format將指針格式轉化為字符串 pointerStr := Format('%p',[pIntTest1]); writeln(pointerStr); //指針指向變量 pIntTest1 := @varInt; //引用指針變量指向的值 varInt := 10 ; //通過Format將指針解引用轉換化為字符串 pointerStr := 'Reference varInt via pointer:' + Format('%d',[pIntTest1^]); writeln(pointerStr); pIntTest^ := 100; //通過Format將指針解引用轉換化為字符串 pointerStr := Format('%d',[pIntTest^]); writeln(pointerStr); //釋放通過new()函數申請的空間 Dispose(pIntTest); // GetMem() 和 FreeMem() GetMem(pIntTest,sizeof(integer)); pIntTest^ := 56; writeln(pIntTest^); FreeMem(pIntTest, sizeof(integer)); //無類型指針指向變量 pointerNoType := @varInt; //無類型指針不能直接引用指向的變量 // pointerNotype ^ := 23; //錯誤 //無類型指針需要進行強制類型轉換才能用,而且必須是指針類型才能轉換 // integer(pointerNoType)^ := 23; 錯誤, 因為 integer 類型不是指針類型 PInt(pointerNoType)^ := 23; writeln(PInt(pointerNoType)^); //強類型別名定義的對象 varStronglyInt := varInt; writeln(varStronglyInt); { 強制類型轉換 1、類型轉換的語法格式為 類型名(表達式或者變量); } { PInt(pointerNoType)^ := 23; 語句先進行強制類型轉換, 將 pointerNoType 強制轉換為 Pint類型,然後再 ^ 解引用,最後進行賦值 } readln; end.
歡迎轉載,轉載請注明來源。