Delphi指针(出处不详)

2021年关于Delphi/Object Pascal编程语言的现状和历史 关于Delphi/Object Pascal Delphi是一种基于 Object Pascal 的编程语言,用于桌面、移动、Web 和控制台软件开发。在 1995 年首次亮相之前的最初开发过程中,Delphi 是一种尚未命名的产品的代号。 function DigitSum(AValue: Int64): Integer; begin if AValue mod 10 = AValue then Result := AValue else Result := (AVa.. 阅读详情
Delphi指针

一、类型指针的定义。对于指向特定类型的指针,在C中是这样定义的:
    int *ptr;
    char *ptr;
    与之等价的Object Pascal是如何定义的呢?
    var ptr : ^Integer;
       ptr : ^char;
    其实也就是符号的差别而已。

  二、无类型指针的定义。C中有void *类型,也就是可以指向任何类型数据的指针。Object Pascal为其定义了一个专门的类型:Pointer。于是,
    ptr : Pointer;
    就与C中的
    void *ptr;
    等价了。

  三、指针的解除引用。要解除指针引用(即取出指针所指区域的值),C 的语法是 (*ptr),Object Pascal则是 ptr^。

  四、取地址(指针赋值)。取某对象的地址并将其赋值给指针变量,C 的语法是
    ptr = &Object;
    Object Pascal 则是
    ptr := @Object;
    也只是符号的差别而已。

  五、指针运算。在 C 中,可以对指针进行移动的运算,如:
    char a[20];
    char *ptr=a;
    ptr++;
    ptr+=2;
    当执行ptr++;时,编译器会产生让ptr前进sizeof(char)步长的代码,之后,ptr将指向a[1]。ptr+=2;这句使得ptr前进两个sizeof(char)大小的步长。同样,我们来看一下Object Pascal中如何实现:
    var a : array [1..20] of Char;
      ptr : PChar; //PChar 可以看作 ^Char
    begin
      ptr := @a;
      Inc(ptr); // 这句等价于 C 的 ptr++;
      Inc(ptr, 2); //这句等价于 C 的 ptr+=2;
    end;

  六、动态内存分配。C语言中,使用malloc()库函数分配内存,free()函数释放内存。如这样的代码:
    int *ptr, *ptr2;
    int i;
    ptr = (int*) malloc(sizeof(int) * 20);
    ptr2 = ptr;
    for (i=0; i<20; i++){
      *ptr = i; ptr++;
    }
    free(ptr2);
    Object Pascal中,动态分配内存的函数是GetMem(),与之对应的释放函数为FreeMem()(传统 Pascal中获取内存的函数是New()和 Dispose(),但New()只能获得对象的单个实体的内存大小,无法取得连续的存放多个对象的内存块)。因此,与上面那段C的代码等价的Object Pascal的代码为:
    var ptr, ptr2 : ^integer;
      i : integer;
    begin
      GetMem(ptr, sizeof(integer) * 20);
        //这句等价于C的 ptr = (int*) malloc(sizeof(int) * 20);
      ptr2 := ptr; //保留原始指针位置
      for i := 0 to 19 do
      begin
        ptr^ := i;
        Inc(ptr);
      end;
      FreeMem(ptr2);
    end;
    对于以上这个例子(无论是C版本的,还是Object Pascal版本的),都要注意一个问题,就是分配内存的单位是字节(BYTE),因此在使用GetMem时,其第二个参数如果想当然的写成 20,那么就会出问题了(内存访问越界)。因为GetMem(ptr, 20);实际只分配了20个字节的内存空间,而一个整形的大小是四个字节,那么访问第五个之后的所有元素都是非法的了(对于malloc()的参数同样)。

  七、字符数组的运算。C语言中,是没有字符串类型的,因此,字符串都是用字符数组来实现,于是也有一套str打头的库函数以进行字符数组的运算,如以下代码:
    char str[15];
    char *pstr;
    strcpy(str, "teststr");
    strcat(str, "_testok");
    pstr = (char*) malloc(sizeof(char) * 15);
    strcpy(pstr, str);
    printf(pstr);
    free(pstr);
    而在Object Pascal中,有了String类型,因此可以很方便的对字符串进行各种运算。但是,有时我们的Pascal代码需要与C的代码交互(比如:用Object Pascal的代码调用C写的DLL或者用Object Pascal 写的DLL准备允许用C写客户端的代码)的话,就不能使用String类型了,而必须使用两种语言通用的字符数组。其实,Object Pascal提供了完全类似C的一整套字符数组的运算函数,以上那段代码的Object Pascal 版本是这样的:
    var str : array [1..15] of char;
      pstr : PChar; //Pchar 也就是 ^Char
    begin
      StrCopy(@str, 'teststr');
        //在C中,数组的名称可以直接作为数组首地址指针来用
        //但Pascal不是这样的,因此 str前要加上取地址的运算符
      StrCat(@str, '_testok');
      GetMem(pstr, sizeof(char) * 15);
      StrCopy(pstr, @str);
      Write(pstr);
      FreeMem(pstr);
    end;

  八、函数指针。在动态调用DLL中的函数时,就会用到函数指针。假设用C写的一段代码如下:
    typedef int (*PVFN)(int); //定义函数指针类型
    int main()
    {
      HMODULE hModule = LoadLibrary("test.dll");
      PVFN pvfn = NULL;
      pvfn = (PVFN) GetProcAddress(hModule, "Function1");
      pvfn(2);
      FreeLibrary(hModule);
    }
    就我个人感觉来说,C语言中定义函数指针类型的typedef代码的语法有些晦涩,而同样的代码在 Object Pascal中却非常易懂:
    type PVFN = Function (para : Integer) : Integer;
    var fn : PVFN;
      //也可以直接在此处定义,如:fn : function (para:Integer):Integer;
      hm : HMODULE;
    begin
      hm := LoadLibrary('test.dll');
      fn := GetProcAddress(hm, 'Function1');
      fn(2);
      FreeLibrary(hm);
    end;
在DELPHI中根据事件指针调用事件     我们知道,在DELPHI中我们看到的VCL组件的事件处理函数其实更准确的应该称为事件属性。既然是属性,它就要符合属性的规定。属性是VCL组件中变量以及方法的访问器,是访问组件内部私有存储控件的接口,是一个指针。   那么我们是否可以通过指针的方法来动态调用VCL的事件呢?答案是肯定的。  例如我们在一个窗体中有一个BUTTON,在它的ONCLICK事件中,我么写如下代码,目的是让用 阅读详情

相关推荐

全面的Object Pascal参考手册

本文还有配套的精品资源,点击获取 简介:Pascal语言是一种结构化编程语言,Delphi是基于Pascal的集成开发环境,而Object Pascal是Pascal的面向对象扩展。这份参考手册深入介绍了Pascal和Object Pascal的基础语法、面向对象的特性如类、对象、继承、封装和多态性。手册详细讲解了动态数组、接口、枚举等高级数据类型,以及VCL组件、异常处理...

weixin_31139479的博客 1732

基本算法(用 PASCAL 描述)

基本算法(用 PASCAL 描述)基本算法(用 PASCAL 描述)1.数论算法 求两数的最大公约数 function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod B); end; 求两数的最小公倍数 function lcm(a,

降龙十八炒 1153

GPU加速的容器化AI开发:AnolisOS/CentOS8中的NVIDIA驱动与CUDA最佳实践

本文详细介绍了在AnolisOS/CentOS8系统中配置NVIDIA驱动与CUDA的最佳实践,涵盖驱动安装、CUDA工具链配置、容器运行时设置及性能优化等关键步骤。特别针对容器化AI开发场景,提供了GPU透传和资源管理的实用方案,帮助开发者构建高效的GPU加速开发环境。

weixin_27791839的博客 341

1.Delphi/Object Pascal简介——《跟老吕学Delphi/Object Pascal》

Delphi/Object Pascal 是一种高级编程语言,由 Borland(现为 Embarcadero Technologies)开发,结合了 Pascal 语言的严谨性和面向对象的编程特性。Delphi 主要用于开发 Windows 应用程序,但也可以跨平台运行。Object Pascal 是 Delphi 的核心编程语言,它扩展了传统的 Pascal 语法,支持类、对象、继承等面向对象的特性。

Python老吕的博客 1646

西红柿成熟度检测数据集总结

成熟度类别标注数量semiripe(半成熟)10275rotten(腐烂)13470fullyripe(完全成熟)35031unripe(未成熟)26212。

crz1336768325的博客 2125

科研绘图实战:用Adobe Illustrator高效排版期刊论文图片

本文详细介绍了使用Adobe Illustrator高效排版科研论文图片的完整工作流。针对期刊投稿常见的图片格式问题,文章重点讲解了矢量图与位图的预处理、AI中的精准对齐与分布技巧、文字样式统一管理以及最终输出TIFF/PDF等符合出版要求的格式。掌握这套方法能确保图片满足高分辨率、规范字体和精确尺寸等期刊硬性标准,显著提升投稿效率。

tomato的博客 1430

【2.Delphi语法基础】2.Object Pascal数据类型

2.Object Pascal 数据类型 Object Pascal是一种强类型语言,对数据类型的定义、声明以及数据赋值和传递操作等有严格的语法规则。Object Pascal的数据类型可以分为标准数据类型和高级数据类型,还支持自定义类型。本节主要来学习标准数据类型。 标准数据类型: Integer 整型 Real 浮点型 Charactor 字符型 String 字符串型 Boolean 布尔型 高级数据类型: Enumerated 枚举型 Su

chenhaiy的博客 803

U8采购入库单CO接口开发实战:加载、新增与删除操作详解

本文详细解析了用友U8采购入库单CO接口的开发实战,重点介绍了加载、新增与删除三大核心操作的实现方法。通过C#代码示例和实际项目经验,帮助开发者高效处理采购入库单,提升企业供应链管理效率。文章还涵盖了环境配置、异常处理、性能优化等关键技巧,适合U8二次开发人员参考。

weixin_33462927的博客 375

Delphi 指针大全

Delphi 指针大全 - 1 - 目 录 1 DELPHI 的指针-引用.................................................................................- 1 - 2 delphi 的“引用/值”模型......................................................

u011354184的专栏 1488

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 102

OSCP-1-3-natraj(本地文件包含、日志中毒、apache2配置漏洞、nmap提权)

像往常一样,我们将使用“Netdiscover”工具识别主机的 IP。所以,让我们首先用 nmap 列出所有 TCP 端口。我们从访问web服务(80端口)开始,在那里我们找到了几张关于Natraj的图片和信息,我们将查看源代码和robots.txt,似乎没有什么有用的。(或至少,目前)。因此,让我们继续进行。在 Dirb 及其默认字典的帮助下,我们找到了一个名为“”的目录。我们进入并列出一个名为“”的文件:如果我们执行它,我们会看到它什么也不做。我们可能需要添加其他内容。

墨痕诉清风的博客 529

DELPHI中的指针类型

DELPHI中的指针类型的常规信息        一个指针变量指示了内存的位置,PASCAL通用指针类型的名称是Pointer。Pointer。有时又被称为无类型指针,因为它只指向内存地址,但编译器并不管指针所指向的数据,这一点与PASCAL严谨的风格似乎不相称,所以建议你在大部分情况下用有类型的指针。       有类型指针在你的应用程序的Type部分用^ (或Pointer)运算符声明。对

3460

硬核实战!Python爬虫从0到1完整版:爬取知乎热榜+回答内容(数据去重+Excel一键导出+避坑指南,零基础友好)

✔️ 适用人群:Python爬虫零基础、想练手实战爬虫、需要爬取知乎内容做数据分析、办公/学习素材整理的同学爬取知乎热榜全量数据(排名+标题+热榜链接+热度值) →自动跟进爬取每个热榜问题的回答内容(回答者昵称+赞同数+评论数+回答正文+发布时间) →数据清洗+智能去重→一键导出格式化Excel文件,所有功能一站式完成入门级难度,无复杂反爬破解、无分布式/代理池,纯requests请求+静态解析,新手能看懂、能运行、能修改;爬取速度快,热榜+回答全程仅需几十秒。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1461

Delphi的指针

Pointers are like jumps, leading wildly from one part of the data structure to another. Their introduction into high-level languages has been a step backwards from which we may never recover.— Anthony Hoare 对指针可能有最让人误解和惧怕的数据类型,因此很多程序员喜欢躲避他们. 但是指针很重要.即使..

zp19860529的博客 2506

Python爬虫实战:高效爬取法律法规数据库的完整指南

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的法律法规数据库爬虫。我们将从爬虫的基本原理讲起,逐步深入到反爬机制应对、数据解析与存储、性能优化等高级话题。文章包含完整的代码实现,使用requests-html、aiohttp等现代库,以及应对法律数据库特殊结构的处理技巧。通过本文,您将掌握构建专业级法律数据采集系统的全套技能。关键词:Python爬虫、法律法规、数据采集、异步爬虫、反反爬本文详细介绍了使用Python爬取法律法规数据库的完整技术方案。

2201_76125261的博客 1274

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

关于delphi指针

关于delphi指针关键词: delphi指针                                           关于delphi指针浅谈Object Pascal的指针大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人 产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针

记录成长的每一步 958

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

delphi中指针的用法

delphi中指针的用法  (2009-02-15 14:42:19) 转载▼ 标签:  杂谈 分类: Delphi delphi中指针的用法 [Delphi学习]浅谈Object Pascal的指针      → Kendy 发表于 2005-2-19 14:14:00 来源:HackDIY's Blog

云中雁012345之成长 876

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

DELPHI如何使用指针?

  <FONT color=#000000>DELPHI如何使用指针? 大家都认为,C语言之所以强大,以及其自由性,很大部分体 现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针。Basic不 支持指针,在此不论。其实,Pascal语言本身也是支持指针的。从最初的Pascal发展至今的Object

UNYYWS的专栏 703

关于DELPHI的指针

因为delphi的数据类型使用很方便,我一直以来都没有使用过指针,但最近的一个软件需要使用到链表,所以不得不学习delphi的指针。不用不知道,到用的时候才发现凡是介绍delphi的书籍都回避了指针的问题,好不容易在网上找到一篇《浅谈Object Pascal的指针》。虽然文章那delphi的指针和c/c++的进行了对比学习,但实用例子实在太少了,所以我在写完程序后,把一些使用过程里的感想写下。

Would you want to know more? 1432

Delphi指针的用法

Delphi指针的用法 DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针,在此...

112

Delphi双指针使用

        Delphi的指针功能实际上是很少有用到的,但是它对外封装了几个指针的类型还是可以用用,如     PChar (=^Char),     PPChar (=^PChar, 传说中的双指针,在Delphi5与它的以下版本可能没有这个类型,但可以自己建立,如:     type      PPChar = ^PChar )等等。        我也是在偶然的机会下碰到这个

沉思录 1047

Delphi 的类型与指针

Delphi 的指针分为 "类型指针" 和 "无类型指针" 两类. Delphi 中的类型, 常用的也得有几百个, 我们可以给每种类型定义相应的类型指针. 其实 Delphi 已经为很多类型预定义了指针, 譬如数据类型: Integer 有对应的 PInteger; Char 有对应的 PChar; string 有对应的 PString; 再譬如: TPoint 有对应的 PPoint; T...

jobschu 728

delphi 指针

Delphi 的指针分为 "类型指针" 和 "无类型指针" 两类. Delphi 中的类型, 常用的也得有几百个, 我们可以给每种类型定义相应的类型指针. 其实 Delphi 已经为很多类型预定义了指针, 譬如数据类型:  Integer 有对应的 PInteger; Char 有对应的 PChar; string 有对应的 PString; 再譬如:  TPoint 有对应的 PP

myfile的专栏 696

DELPHI指针的使用

DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针,在此不论。其实,Pascal语言本身也是支持指针的。从最初的Pascal发展至今的Object Pascal,可以说在指针运用上,丝毫不会逊色于C语言的指针。 ...

weixin_30823001的博客 108

delphi结构指针

Delphi 记录类型- 结构指针(2013-03-25 17:03:53) 转载▼ 标签: it 分类: Delphi unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

u010359641的专栏 674
上一篇: New Direction...
下一篇: DELPHI基础开发技巧(还没看#-_-)
Vigorcsdn
博客等级 码龄23年 0粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值