程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi_05_Delphi_Object_Pascal_基本語法_03,delphiobjectpascal

Delphi_05_Delphi_Object_Pascal_基本語法_03,delphiobjectpascal

編輯:Delphi

Delphi_05_Delphi_Object_Pascal_基本語法_03,delphiobjectpascal


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

 

  歡迎轉載,轉載請注明來源。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved