跟着老侯玩编程 跟着老侯玩编程
首页
  • 基础语法
  • 网络编程
  • 设计模式
  • 基础篇
  • 进阶篇
  • 框架篇
  • Redis
  • Alibaba
  • 课程目录
  • 码农宝典
留言
首页
  • 基础语法
  • 网络编程
  • 设计模式
  • 基础篇
  • 进阶篇
  • 框架篇
  • Redis
  • Alibaba
  • 课程目录
  • 码农宝典
留言
  • 基础语法

    • 单元文件
    • 变量和常量
      • 关键字var
        • 变量赋值
        • 初始值
      • 关键字const
    • 内联变量
    • 基本数据类型
    • 复合数据类型
    • 语句(选择语句)
    • 语句(循环语句)
    • 数组
    • 初识例程
    • 初识面向对象
    • 属性Property
    • 面向对象的方法
    • 指针
    • 接口
    • 匿名函数和委托实现
    • 多态
    • 字符串详解
    • 异常处理
    • 反射机制
    • 泛型容器
    • JSON
    • 文件操作
    • Dll创建并调用
    • DLL初始化和退出处理
    • Package
    • 理解消息循环
    • VCL与Windows消息
    • 钩子原理
    • 进程通讯-内存映像
    • 多线程开篇
    • 线程控制
    • 线程同步
  • 网络编程

    • 网络编程基础
    • Delphi网络编程
    • select
    • WSAAsyncSelect
    • WSAEventSelect
  • 设计模式

    • 单例模式
    • 单例模式二
    • 策略模式
    • 简单工厂模式
    • 建造者模式
    • 原型模式
    • 模板方法模式
    • 状态模式
    • 迭代器模式
    • 解释器模式
    • 责任链模式
    • 中介者模式
    • 备忘录模式
    • 命令模式
    • 观察者模式
    • 访问者模式
    • 适配器模式
    • 桥接模式
  • Delphi
  • 基础语法
舞动的代码
2022-05-05
目录

变量和常量

最初的Pascal 语言是以一些简单的概念为基础建立起来的,这些概念现在普遍出现在编程语言中。最重要的概念当属数据类型,数据类型决定了变量可取的值,以及可在这些值上进行的操作。Pascal 数据类型的概念强于C语言及早期的BASIC语言,在C语言中算术数据类型是可以互换的,而早期的BASIC语言中根本没有与数据类型相似的概念

# 关键字var

Pascal 变量在使用前必须声明,声明变量时必须指定一种数据类型。下面是变量声明的例子:

var
  Value: Integer;
  IsCorrect: Boolean;
  A, B: Char;
1
2
3
4

(1)关键字var可以在许多地方使用,放在函数或过程的开始部分,用来声明函数或过程的局部变量。也可以放在单元中,用于声明全局变量。

(2)var关键字之后是一组变量名列表,每个变量名后跟一个冒号和数据类型名,一行中可以声明多个变量,如上例中最后一句。

(3)一旦变量的类型被指定,你只能对变量执行该变量类型支持的操作。例如,在判断操作中用布尔值,在数字表达式中用整型值,你不能将布尔值和整型值混用(在C语言中可以这样)。

# 变量赋值

使用简单的赋值语句,可写出下面的代码:

Value := 10;
IsCorrect := True;
1
2

但下面的语句是不正确的,因为两个变量数据类型不同:

Value := IsCorrect; // error

1
2

在Delphi中编译这句代码,会出现错误信息:Incompatible types: 'Integer' and 'Boolean'.(类型不兼容:‘整型’和‘布尔型’)。把一个 True 或 False 的值赋给一个整型变量没有什么意义。

# 初始值

所谓的初始值就是某个变量在第一次声明时所赋的值,需要特别注意的是在Delphi中全局变量是有默认初始值的,其初始值一般跟类型有关系,例如

program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;
var
  Num: Integer;
begin
    Writeln(Num);
    Readln;
end.
1
2
3
4
5
6
7
8
9
10
11
12
13

上面案例中Num变量为全局变量而类型为Integer所以其初始值为0,当然全局变量还可以在声明时直接赋初始值,例如下面的代码

uses
  System.SysUtils;
var
  Num: Integer=10;
begin
    Writeln(Num);
    Readln;
end.
1
2
3
4
5
6
7
8

局部变量不可以在声明的时候赋值,同时局部变量没有默认的初始值,如果不对局部变量做初始化赋值系统会给一个没有任何意义的随机值,所以在使用局部变量时首次引用建议是赋值操作

program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

procedure  Show ();
var
  Num: Integer;
begin
  //此处打印输出Num的值为一个随机的整数
  Writeln(Num);
end;

begin
    Show();
  Readln;

end.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

这也是为什么我们在定义局部变量的时候开始都需要赋值为0或者nil的原因

# 关键字const

对于在程序运行期间保持不变的值,Pascal 允许通过常量来声明。声明常量不必特定数据类型,但需要赋一个初值。编译器会根据所赋初值自动选用合适的数据类型。例如:

const
  Thousand = 1000;
  Pi = 3.14;
  AuthorName = 'Marco Cantù';
1
2
3
4

Delphi 根据常量的值来决定它的数据类型。上例中的Thousand 变量,Delphi会选用SmallInt数据类型 (短整型--能容纳Thousand变量的最小整数类型)。如果你想告诉Delphi 采用特定的类型,你可在声明中加入类型名,方法如下:

const
  Thousand: Integer = 1000;
1
2

对于声名的常量,编译器有两种编译选择:

(1)为常量分配内存,并把常量的值放入内存

(2)在常量每次使用时复制常量值。第二种方法比较适合简单常量。

常量其实也称为只读变量,含义即只能读不能写,也就是会说它的值不能改变

资源串常量

我的理解是这一类的常量被当作了程序的资源数据进行处理,例如当定义字符串常量时,你可这样写:

const
  AuthorName = 'Marco Cantù';
1
2

从Delphi 3 开始,你可以用另一种方式写:

resourcestring
  AuthorName = 'Marco Cantù';
1
2

上面两个语句都定义了一个常量,也就是定义了一个在程序运行期间保持不变的值,但两者的实现过程却不同,用**resourcestring **指令定义的字符串变量将被保存到程序资源的字符串表中。

例子:中设置了一个按钮, 相应代码如下:

resourcestring
  AuthorName = 'Marco Cantù';
  BookName = 'Essential Pascal';

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage (BookName + #13 + AuthorName);
end;
1
2
3
4
5
6
7
8

以上代码中的两个字符串将分两行输出显示,因为字符串被分行符 #13 隔开。

当你用资源编辑器打开执行文件时,你会在程序资源中看到你所定义的字符串。这意味着字符串并没有进入编译代码,而是保存在执行文件 (EXE文件) 的一个单独区域。

简而言之,采用资源的好处一方面可让Windows 来完成有效的内存处理,另一方面不用更改源代码就可实现程序的本地化 (把字符串翻译成不同的语言)。

单元文件
内联变量

← 单元文件 内联变量→

Theme by Vdoing | Copyright © 2013-2023 冀ICP备16006233号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×