這次是一個基本語法的第一部分,包括變量、變量初始化、常量、運算符、字符串等內容。
{
本程序演示 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.
歡迎轉載,轉載請注明來源。