繼續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.
歡迎轉載,轉載請注明來源。