文档章节

学习结构[记录]类型(4) - 结构指针

涂孟超
 涂孟超
发布于 2014/09/26 15:32
字数 456
阅读 7
收藏 0
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TRec = record       {定义结构 TRec}
    name: string[12];
    age: Word;
  end;
  TPRec = ^TRec;      {定义 TRec 结构的指针类型 TPRec}

var
  Rec:         TRec;    {声明结构变量}
  PRec1,PRec2: TPRec;   {声明 TPRec 指针变量}
  PRec3:      ^TRec;    {声明 TRec 结构的指针变量, 现在 PRec1 与 PRec3 是不同类型的变量}
  P:           Pointer; {声明无类型指针}


//通过结构指针访问结构
procedure TForm1.Button1Click(Sender: TObject);
begin
  Rec.name := '张三';
  Rec.age := 18;

  PRec1 := @Rec; {把 Rec 的地址告诉 PRec1}

  {本来应该这样访问}
  ShowMessage(PRec1^.name); {张三}

  {Delphi 允许这样简单使用结构指针}
  ShowMessage(PRec1.name);  {张三}

  {如果我们通过指针修改了数据}
  PRec1.name := '李四';

  {那么}
  ShowMessage(Rec.name); {李四}
  {因为 PRec1 和 Rec 所指的是同一个数据}
end;


//如果是单独使用指针, 必须先给内存
procedure TForm1.Button2Click(Sender: TObject);
begin
  GetMem(PRec2, SizeOf(TRec));
  PRec2.name := '王五';
  PRec2.age := 9;

  ShowMessage(PRec2.name); {王五}

  {手工给的内存, 必须手工释放}
  FreeMem(PRec2);
end;


//虽是同一个结构的指针, 但还不是一个类型
procedure TForm1.Button3Click(Sender: TObject);
begin
  Rec.name := '孙六';
  Rec.age := 16;

  {把 Rec 的地址给属于 ^Rec 类型的 PRec3 指针}
  PRec3 := @Rec;
  ShowMessage(PRec3.name); {孙六}

  {如果要把 PRec3 知道的值告诉 PRec1, 需要类型转换}
  PRec1 := TPRec(PRec3);
  ShowMessage(PRec1.name); {孙六}


  {反过来想, 如果要把 PRec1 知道的值告诉 PRec3 呢?}
  Rec.name := '赵七';
  Rec.age := 24;
  PRec1 := @Rec;
  ShowMessage(PRec1.name); {赵七}

  {这样转换}
  TPRec(PRec3) := PRec1;
  ShowMessage(PRec3.name); {赵七}
end;


//用无类型指针读写 TRec 中的数据
procedure TForm1.Button4Click(Sender: TObject);
begin
  Rec.name := '杜八';
  Rec.age := 36;

  P := @Rec;

  {赋值}
  TPRec(P).name := '侯九';

  {取值}
  ShowMessage(TPRec(P).name); {侯九}
end;

end.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/01/09/1031787.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
C语言数据结构预备知识模块二:结构体

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_38321889/article/details/80891331 继上面的基础模块知识之指针之后,我们对数据结构的预备知识——结...

善水输出端
2018/07/03
0
0
Redisbook学习笔记(1)双端链表

双端链表作为一种通用的数据结构在Redis 内部使用得非常多它既是Redis 列表结构的底 层实现之一还被大量Redis 模块所使用用于构建Redis 的其他功能。 对列表类型的键进行操作——比如执行 RP...

技术小美
2017/11/17
0
0
C语言学习之 数组,指针,字符串. (三)

保持一贯的风格, 进入正题之前,先写一段废话. 写点东西是件轻松的事, 我从未将写内容当作是一种负担. 但是生活中总有一些事情会扰乱心神. 我是说我之前想把一篇内容写全,写丰富完整事实上我写...

泡不烂的凉粉
2012/11/08
101
0
C语言编程学习程序解析:C语言的指针和函数返回值解析

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/05/27
0
0
数据结构学习记录_2019.02.22

数组的表示的方法: (1)结构数组存储非零项(二元数组) (2)链表存储非零项:每个结点包含系数和指数两个数据域以及一个指针域,coef-expon-link typedef struct PolyNode *Polynomial;s...

Bran_don
02/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【0918】正则介绍_grep

【0918】正则介绍_grep 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 一、正则介绍 正则是一串有规律的字符串,它使用单个字符串来描述或匹配一系列符合某个语法规则的字符串。 二、grep工具 ...

飞翔的竹蜻蜓
15分钟前
4
0
为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
53分钟前
8
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
今天
4
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
今天
4
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部