Basic Pascal Tutorial/Chapter 1/Variables and Data Types/zh CN

From Free Pascal wiki
Jump to navigationJump to search

български (bg) Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) русский (ru) 中文(中国大陆) (zh_CN)

1D - 变量和数据类型 (原作者: Tao Yue, 状态: 已更改)

变量跟常量比较相似,但是变量的值在程序运行的过程中可以更改。变量在使用之前必须先在Pascal中说明。

var
  IdentifierList1 : DataType1 = defaultValue;
  IdentifierList2 : DataType2 = defaultValue;
  IdentifierList3 : DataType3 = defaultValue;
  ...

IdentifierList 表示一系列标识符,它们之间用逗号(,)分隔。在同一个列表中的所有标识符都被声明为相同的类型。


定义变量时,可以初始化变量值,defaultValue 将是该变量默认值。

但一次只能对一个变量设置初始值,否则在编译时,报错:Error: Only one variable can be initialized(错误:只有一个变量可以被初始化)。


Pascal中包含如下基本数据类型:

  • integer
  • real
  • char
  • boolean

标准Pascal并没有单独规定字符串类型,但是大多数现代编译器都规定了。经验丰富的Pascal程序员会在动态分配内存时使用指针类型,也会在面对对象编程时使用对象类型,还会使用其它许多数据类型,但我们这里只介绍入门知识。

Pascal中数据类型的详细信息:

  • integer类型的数据范围是-3276832767。这是一个16位字能够存储的有符号整数的最大范围,同时也是16位CPU时代遗留的传统。为了向下兼容,32位有符号整数类型为longint,能存储远超前面那个范围的数值。
  • real类型的数据范围是3.4x10-383.4x1038,负数部分也是同样的范围。实数在计算机内部的存储方式类似于科学记数法,分为尾数部分和指数部分,这增加了复杂性。在Pascal语言中,你可以在你的代码里用定点记数法或科学记数法来表达一个实数值。科学记数法表示实数的时候,中间用字符E分隔尾数和指数。因此,452.134.5213e2是一样的。
  • char类型存储字符。记住要把字符用单引号括起来,像这样:'a' 'B' '+'。标准Pascal使用8位字符,而非16位字符,所以Unicode这种用来在一个统一编码体系里表示世界上所有语言字符集的编码是不受支持的。
  • WideChar是一种双字节字符(是属于DBCS双字节字符集的元素),能用来存储unicode字符。
  • Free Pascal支持Delphi中的PChar类型。PChar被定义为Char类型的指针,但它还具有一些额外的特性。对PChar类型最好的理解就是将其等价于C风格空结尾字符串,也就是说,PChar类型的变量实际上是一个指向Char数组的指针,并且这个数组以空字符(#0)结尾。Free Pascal支持PChar型常量的初始化和直接赋值。例如,下面的两段代码是等效的:
program one;  
var P : PChar;  
begin  
  P := 'This is a null-terminated string.';  
  WriteLn (P);  
end.
program two;  
const P : PChar = 'This is a null-terminated string.';  
begin  
  WriteLn (P);  
end.
  • Free Pascal支持Turbo Pascal中定义的String类型:若干字符的一个序列,带有可选的尺寸规格。还支持Delphi中定义的ansistrings类型(长度不限)。声明方式如下:
variable_name : string;                    // 如果没有指定长度,默认长度为255
variable_name : string[length];            // 1 < length <= 255
  • 预定义的ShortString类型是长度为255的string类型。
  • AnsiStrings是一种没有长度限制的字符串类型。这种类型是引用计数的,而且能确保以空字符结尾。在计算机内部,一个ansistring被当做一个指针:字符串的实际内容存放在堆中,内容需要占用多少内存就分配了多少内存。
  • Widestrings(用于表示unicode字符串)和ansistring的实现方式非常相似:引用计数,空字符结尾的数组,不同的只是后者是用WideChars数组的方式来实现的,而非通常的Chars
  • boolean类型只有两个值:TRUEFALSE

下面是声明几个变量的例子:

var
  age, year, grade : integer;
  circumference : real;
  LetterGrade : char;
  DidYouFail : Boolean;

来自FPC手册的内容

整数类型
类型 范围 所占字节数
Byte 0 .. 255 1
Shortint -128 .. 127 1
Smallint -32768 .. 32767 2
Word 0 .. 65535 2
Integer smallint或longint 2 或 4
Cardinal longword 4
Longint -2147483648 .. 2147483647 4
Longword 0..4294967295 4
Int64 -9223372036854775808 .. 9223372036854775807 8
QWord 0 .. 18446744073709551615 8

如果在表达式中混合使用不同类型的整数,Free Pascal会执行自动类型转换.

实数类型
类型 范围 有效数字 所占字节数
Real 各平台不同 ??? 4 or 8
Single 1.5E-45 .. 3.4E38 7-8 4
Double 5.0E-324 .. 1.7E308 15-16 8
Extended 1.9E-4932 .. 1.1E4932 19-20 10
Comp -2E64+1 .. 2E63-1 19-20 8
Currency -922337203685477.5808 922337203685477.5807 8


布尔类型
类型 所占字节数 Ord(True)
Boolean 1 1
ByteBool 1 任意非零数
WordBool 2 任意非零数
LongBool 4 任意非零数
上一页 目录 下一页