這次是一個基本語法的第一部分,包括變量、變量初始化、常量、運算符、字符串等內容。
{ 本程序演示 Delphi Pascal 的基本語法 1、變量及變量的初始化 2、常量 3、運算符 3、 4、 } program Syntax; {$APPTYPE CONSOLE} uses SysUtils,Windows,StrUtils; { 變量 1、Delphi中變量必須在固定的地方進行定義 2、Delphi中通過關鍵字 var 來定義變量 3、語法格式為: var 變量名標識符列表 : 變量類型 ; 變量名列表中的各個變量名之間用逗號隔開 4、初始化格式為 var 變量名標識符列表 : 變量類型 = 初始化值; 5、注意三個符號的位置 冒號 等於號 和 分號 } var //第一種形式的變量定義 greetWord:string; //第二種形式的變量定義 nAdd,nAddFactor:integer; //變量的初始化 rad : single = 5.0 ; //寬字符字符串 chinaName:WideString; //ansichar 類型單字節字符串 englishName:AnsiString; //定義一個沒有初始化的字符串 noInitString:string; //定義一個與win32兼容的字符串 dirWideString:widestring; dirString:ansistring; { 常量 1、Delphi中預定義了一部分常量 true Boolean 類型的true false Boolean 類型的false 2、在Delphi中利用 const 關鍵字定義常量 3、語法格式為 const 常量名標識符 : 常量的數據類型 = 初始化值。 4、初始化值必須有,常量的數據類型可以省略,Delphi會根據初始化值自動確定 常量的數據類型,進而分配相應的內存空間。 但是對於整數型的常量,內存 空間的分配遵循能容納初始化值的最小空間數據類型確定。 例如: 10 會確定為 shortint類型 5、常量還有一種常量字面值,就是和C語言中一樣的字面值,例如 10 整數常量 2.06 實數常量 'Hello world' 字符串常量 'a' 字符常量 } const pi:single=3.1415926; { 要點 1、Delphi中允許在定義變量和常量的時候使用編譯期函數來初始化變量。 2、常見的編譯期函數有: Sizeof() Ord() Chr() Trunc() Round() High() Low() 這裡就不舉例啦,一般不太會用到, } begin //賦值運算符 := greetWord := 'Hello, Wellcome to Delphi world!'; //比較運算符 = 判斷是否相等 nAdd := 10; nAddFactor := 1; if nAdd = nAddFactor then begin writeln('Equal.'); end; //比較運算符 <> 不等於運算符, 如果不相等則返回TRUE if nAdd <> nAddFactor then begin writeln('Not Equal.'); end; //邏輯運算符 and 與 ,注意Delphi中邏輯運算符的優先級要高於比較運算符 if (1 = nAdd) and (2 <> nAddFactor )then begin writeln('The judge is ture.'); end; //邏輯或 or 非 , 注意Delphi中邏輯運算符的優先級要高於比較運算符 if (1 = nAdd) or (2 <> nAddFactor )then begin writeln('The judge is ture.'); end; //邏輯非 not 非, 注意Delphi中邏輯運算符的優先級要高於比較運算符 if not (1 = nAdd) then begin writeln('1 is not equal nAdd.'); end; { 數學運算符 1、數學運算符基本與C語言類似,但是有幾個特殊的需要說明一下 2、mod 求模運算符 3、div 整數除法, 得到的結果是整數 4、/ 浮點數除法,得到的結果是浮點數 } writeln('整數除法 3 div 2 的結果是:'); writeln(3 div 2); writeln('浮點數除法 3 / 2 的結果是:'); writeln(3 / 2); writeln('求余數 3 mod 2 的結果是:'); writeln(3 mod 2); { 按位運算符 1、Delphi也提供了按位運算的運算符 2、and 按位與 3、or 按位或 4、not 按位非 5、xor 按位異或 6、shl 按位左移 7、shr 按位右移 } writeln('2 and 5 按位與的結果是:'); writeln(2 and 5); writeln('2 or 5 按位或的結果是:'); writeln(2 or 5); writeln('not 2 按位非的結果是:'); writeln(not 2); writeln('2 xor 5 按位異或的結果是:'); writeln(2 xor 5); writeln('2 shl 5 按位左移的結果是:'); writeln(2 shl 5); writeln('2 shr 5 按位右移的結果是:'); writeln(2 shr 5); { 增量運算符 1、inc 增加 2、dec 減小 3、有兩種形式 inc(a); 得到的結果是 a := a + 1 inc(a, b); 得到的結果是 a := a + b } writeln('nAdd is:'); writeln(nAdd); writeln('Inc(nAdd) is:'); Inc(nAdd); writeln(nAdd); Dec(nAdd); writeln('Dec(nAdd) is:'); writeln(nAdd); { 數據類型 1、整數 8位、16位、32位有符號無符號整數,64位有符號整數 2、4位、6位、8位、10位浮點型,64位貨幣類型 3、1字節字符、2字節字符 4、定長字符串、變長字符串 5、NULL結尾字符串、NULL結尾寬字符串 6、動態兩字節字符串 7、1字節、2字節、4字節boolean類型 } //ansichar 具有標准一字節大小 if sizeof(char)=sizeof(ansichar) then begin writeln('char and ansichar have the same size.'); end; //char 具有和widechar一樣的有兩字節大小 if sizeof(char)=sizeof(widechar) then begin writeln('char and widechar have the same size.'); end; { 字符串 1、shortstring 具有256字節長度的字符串,ansichar字符串 2、ansistring 顧名思義就是由 ansichar 構成的字符串 3、widestring 顧名思義就是由 widechar 構成的字符串 4、pchar 以NULL結尾的字符串的指針,兼容C語言的char* 5、pansichar 以NULL結尾的ansichar字符串指針 6、pwidechar 以NULL結尾的 widechar 字符串指針 7、默認情況下 string 定義的是 ansichar 類型 } (* 1、需要特別注意 {$H+} 和 {$H-} 編譯開關對string類型的影響 {$H+} 則表示 string 為 ansichar {$H-} 則表示 string 為 shortchar 2、數值型數據類型不做過多的介紹 *) writeln(sizeof(shortstring)); //給寬字符字符串賦值 chinaName := '中國'; //給單字節字符串賦值 englishName := 'England'; writeln(chinaName); writeln(englishName); { ansistring的細節 1、string定義的時候沒有分配內存 2、賦值或者初始化後string變量就分配內存 3、通過SetLength()函數可以申請內存 4、可以通過索引訪問字符串 5、string類型具有垃圾自動回收機制,當生命周期結束後,由系統自動回收 系統分配給string的內存 6、字符串類型支持 + 連接運算 } // 下面的用法錯誤 //noInitString[0] := 'a'; // 但是利用下面的方法則是正確的,通過 SetLength() 函數申請內存空間。 SetLength(noInitString,1); noInitString := 'a' ; //當進行 + 連接字符串運算時,系統會自動分配足夠的內存 noInitString := noInitString + ' apple'; writeln(noInitString); { ansistring與 Win32 接口具有兼容性 1、因為 ansistring 是以 NULL 結束的字符串,因此可以與Win32字符串兼容 } SetLength(dirString,256); //SysAllocStringLen(dirWideString,256); //獲取windows目錄 //GetWindowsDirectory(PWideChar(dirWideString),256); dirString := dirWideString; writeln(dirString); readln; end.
歡迎轉載,轉載請注明來源。