上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
DELPHI语法编程基础(5)
作者:未知 申领版权
2010年12月12日 共有 1455 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    指针 
    指针是存放指定类型(或未定义类型)变量内存地址的变量,因此指针间接引用一个值。定义指针不需用特定的关键字,而用一个特殊字符,这个特殊字符是脱字符号(^),见下例:
    type
    PointerToInt = ^Integer;
    一旦你定义了指针变量,你就可以用@ 符号把另一个相同类型变量的地址赋给它。见下例:
    var
    P: ^Integer;
    X: Integer;
    begin
    P := @X;
    // change the value in two different ways
    X := 10;
    P^ := 20;  
    如果定义了一个指针P,那么P表示指针所指向的内存地址,而P^表示内存所存储的实际内容。因此,在上面的代码中, P^ 与X相等。
    除了表示已分配内存的地址外,指针还能通过New 例程在堆中动态分配内存,不过当你不需要这个指针时,你也必须调用Dispose 例程释放你动态分配的内存。
    var
    P: ^Integer;
    begin
    // initialization
    New (P);
    // operations
    P^ := 20;
    ShowMessage (IntToStr (P^));
    // termination
    Dispose (P);
    end;
    如果指针没有值,你可以把nil 赋给它。这样,你可以通过检查指针是否为nil 判断指针当前是否引用一个值。这经常会用到,因为访问一个空指针的值会引起一个访问冲突错误,也就是大家知道的“一般保护错”(GPF)。见下例:
    procedure TFormGPF.BtnGpfClick(Sender: TObject);
    var
    P: ^Integer;
    begin
    P := nil;
    ShowMessage (IntToStr (P^));
    end;
    通过运行例GPF,或者看图4.4,你可以看到上述这种结果。
    图 4.4: 访问nil指针引起的系统错误
    
    将上面程序加以修改,访问数据就安全了。现在将一个已存在的局部变量赋给指针,指针使用就安全了,虽然如此,还是加上了一个安全检查语句:
    procedure TFormGPF.BtnSafeClick(Sender: TObject);
    var
    P: ^Integer;
    X: Integer;
    begin
    P := @X;
    X := 100;
    if P <> nil then
    ShowMessage (IntToStr (P^));
    end;
    Delphi 还定义了一个Pointer 数据类型,它表示无类型的指针(就象C语言中的void* )。如果你使用无类型指针,你应该用GetMem 例程,而不是New例程,因为GetMem 例程能用于内存分配大小不确定的情况。
    实际上,Delphi 中必须使用指针的情况很少。虽然如此,若要进行高级编程和完全理解Delphi 对象模型,理解指针是很重要的,因为Delphi 对象模型在幕后使用了指针。
    注意:虽然在Delphi中不常使用指针,但是经常会用一个极为相似的结构--引用(references)。每个对象实例实际上是一个隐含的指针,或说是对其实际数据的引用,利用引用,能象用其他数据类型一样使用对象变量。
    文件类型 
    另一个Pascal特定的类型构造器是文件类型(file)。文件类型代表物理磁盘文件,无疑是Pascal语言的一个特殊类型。按下面的方式,你可以定义一个新的数据类型:
    type
    IntFile = file of Integer;
    然后,你就能打开一个与这个结构相应的物理文件、向文件中写入整数、或者从文件中读取当前的值。
    Pascal 文件类型的使用很直观,而且Delphi 中也定义了一些控件用于文件保存和装载,以及对数据流和数据库的支持。
    简单语句和复合语句 
    Pascal 简单语句中不包含任何别的语句,赋值语句和过程调用即是简单语句的例子。简单语句用分号隔开,如下所示:
    X := Y   Z;  // assignment
    Randomize;   // procedure call
    用begin 和end 将简单语句括起来即组成复合语句,复合语句用法与普通的Pascal 语句相同,见下例:
    begin
    A := B;
    C := A * 2;
    end;
    end之前的最后一条语句末尾分号不是必需的,你可以写成:
    begin
    A := B;
    C := A * 2
    end;
    这两种写法都是正确的。第一种多了一个无用(但也无害)的分号。分号实际上是一个空语句,也就是说,是一个没有代码的语句。有时,空语句可用在循环体或其他特殊情况中。
    注意:虽然最后一条语句末尾的分号没有用,建议你也这样做。因为有时你可能需要在末尾添加语句,如果最后没有加分号,你就必须记着加上它,与其如此不如一开始就加上它。
    赋值语句 
    在Pascal 语言中赋值语句用冒号-等号操作符“:=”,对使用其他语言的编程人员来说这是一个奇怪的符号。在其他语言中用作赋值符号的“=”在Pascal 中用作关系运算符,用于判断是否相等。
    注意:赋值和相等判断使用不同的符号,使Pascal 编译器(象C编译器一样)能更快解译源代码,因为这样就不需要通过检查上下文来判断符号的意义,此外使用不同操作符也使代码更易读。
    条件语句 
    条件语句通过条件检测,判断是否执行该条件语句中包含的语句。条件语句可有两种基本形式:if语句和case语句。
    If语句 
    对if-then型语句,仅当条件满足时,语句才执行;对if-then-else型,if语句在两条语句中选择一条执行。条件用布尔表达式建立,这里通过一个简单的Delphi 例子来示范如何写条件语句。首先,创建一个应用程序,在form上面放两个复选框(check box)和四个按钮(button),不要改变复选框和按钮的名字,双击按钮为其OnClick 事件添加响应程序。下面是第一个按钮事件代码中一条简单的if语句:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    // simple if statement
    if CheckBox1.Checked then
    ShowMessage ('CheckBox1 is checked')
    end;
    当点击button1,如果第一个复选框中有复选标记,那么这个程序将显示一条消息(见图5.1)。我用了ShowMessage 函数,因为它是Delphi中最简单的短信息显示函数。
    图 5.1: 例IfTest显示的信息 
    
    如果点击按钮后没有反应,表明复选框未被选中。对于这种情况,最好能交代得更清楚些,为此在第二个按钮的代码中,我用了if-then-else 语句:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    // if-then-else statement
    if CheckBox2.Checked then
    ShowMessage ('CheckBox2 is checked')
    else
    ShowMessage ('CheckBox2 is NOT checked');
    end;
    要注意的是,不能在第一句之后、else 关键词之前加分号,否则编译器将告知语法错误。实际上,if-then-else 语句是单纯的一条语句,因此不能在语句中间加分号。
    if 语句可以很复杂,句子中的条件部分可以是一系列条件(用and、 or 、 not等布尔操作符联接起来),if语句又可以嵌套另一个if语句,见例IfTest中其它两个按钮的示范代码:
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    // statement with a double condition
    if CheckBox1.Checked and CheckBox2.Checked then
    ShowMessage ('Both check boxes are checked')
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    // compound if statement
    if CheckBox1.Checked then
    if CheckBox2.Checked then
    ShowMessage ('CheckBox1 and 2 are checked')
    else
    ShowMessage ('Only CheckBox1 is checked')
    else
    ShowMessage (
    'Checkbox1 is not checked, who cares for Checkbox2?')
    end;
    仔细阅读代码并执行程序,看看能不能理解整个程序。当搞不清某种编程结构时,可以先写一个简单程序,这样可以帮你学习许多东西。你可以再加几个复选框,增加这个简例的复杂程度,并进行各种测试。

    

 

相关新闻

每一个程序员要遵守的一些优秀编程风格
代词it, that, one, the one 的辨析
《VB程序设计基础》选择题
Is Family Life Changing
设计模式之Iterator
设计模式之Visitor
设计模式之Interpreter(解释器)
设计模式之Mediator(中介者)
设计模式之Strategy(策略)
设计模式之State

您可能对这些感兴趣  

第7讲 综合分析BIM在运用与推广中的障碍问题
考核学生质量的困难
日本福岛核电站事故初步分析
论科技异化与科技人化
中国科技计划项目管理现状与对策
财政科技资金的审计重点和内容
软科学研究机构在政府决策中的功效、困境及对策研究
打造超级DOS系统(下)
DOS命令基础应用(6)
打造超级DOS系统(上)

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》