吾爱分享资源网

 找回密码
 立即注册
吾爱分享资源网 易语言相关 查看内容

易语言如何编程第十九章指针的说明及应用

2017-10-14 13:34| 发布者: admin| 查看: 122| 评论: 0|原作者: admin

摘要: 第十九章指针的说明及应用 指针是编程语言中的一个重要概念,也是一个重要特点,正确而灵活的运用它,可以有效的表示复杂的数据结构,能动态分配内存,能方便的使用文本,有效而方便的使用数组,能直接处理物理内存等,掌握 ...
                                                                           第十九章指针的说明及应用
指针是编程语言中的一个重要概念,也是一个重要特点,正确而灵活的运用它,可以有效的表示复杂的数据结构,能动态分配内存,能方便的使用文本,有效而方便的使用数组,能直接处理物理内存等,掌握指针的应用可以使程序简介紧凑高效,每一个学习和使用易语言的人都应当深入学习掌握指针.
指针的概念比较复杂,使用也比较灵活,因此初学的时候经常出错,在学习这部分是务必十分小心,多思考.
一.指针和地址的概念
为了说清楚什么是指针,必须先了解数据在内存中如何储存,如何读取.
在程序中定义一个变量,在运行的时候就会给变量分配内存单元,系统根据程序定义数据类型,分配一定的长度空间,如我们使用一个整数型变量,就会分配4字节,如使用长整数型就分配8字节.内存区域的每个字节都有一个编号,就是 地址 .
假设我们申请了2个整数型变量 甲.乙 系统分配2000-2004 四个字节给甲 分配2005-2009给乙.在程序中一般使用变量名来对甲,乙进行读取操作.这样叫做直接访问.
还可以使用另外一种叫做 间接访问 的方式 将变量甲的地址存放在另一个变量 丙中, 我们要对变量甲做出读写操作 先找到存放变量甲的地址的 变量丙,从中取出变量甲(2000-2004)的地址然后对2000-2004进行读取写入得到变量甲的数据.这样的操作叫做 间接访问,其中,变量丙指向变量甲的地址. 由于通过地址能找到所需要的变量单位,因此在计算机语言中地址形象化的称为 "指针"
二.变量的指针和指向变量的指针变量
如前面描述的一样.变量的指针就是变量的地址,存放变量地址的变量是指针变量.用来指向另外一个变量,
在易语言中先申请一个任意类型的变量甲,和整数型变量乙,然后使用 取变量数据地址 () 命令来返回变量甲的内存地址,然后将地址存放到指定变量乙中,这就可以称变量乙为变量甲的指针变量.
例[19-1]我们使用一个简单的例子来完成一次指针操作.
易语言非常方便的提供了 写到内存 指针到文本 指针到字节集 等命令.
首先我们申请一个文本变量 然后对其进行赋值,然后申请一个整数型变量用来存放内存地址.如果你不打算用扩展支持库 可以使用其他方法来得到指针地址代码如下
QQ截图20171014132940.png
首先我们申请一个程序集文本变量 "数据" 并对其赋值,因为没赋值的话是取不到内存地址的哦.然后取到其数据地址然后赋值给变量 "指针".
然后通过写到内存命令将编辑内容写入变量指针中写到内存命令中第三个参数 指针长度,文本型可以为空也就是-1 不限制内存长度,但是数值型等必须写入与变量指针原数据类型相同的长度,否则容易造成进程内存垃圾货错误而引发崩溃.
三.数组的指针和指向数组的指针变量
一个变量有地址,一个数组包含若干个变量,每个数组元素都在内存中占用储存单元,他们都有相应的地址,指针变量既可以指向变量,当然也可以指向数组和数组元素.所谓数组的指针是数组的起始地址,数组元素的指针是数组元素的地址.
易语言中规定 (其他语言也类似)如果指针变量A指向数组中的元素,那么A+1指向同数组的下一个元素(不是简单的将A+1).例如我们申请的数组成员为整数型.每个成员占4字节,则,A+1就是说 A的地址加上4个字节指向下一个地址.
四.指针在开发DLL中的应用

我前一章讲到,易语言在开发DLL时候,DLL接口参数只能是时间.数值型.而指针恰恰可以弥补这一缺憾,在易语言回调子程序和易语言DLL公开子程序中用作对外输出其他类型数据.这点上一章大体讲过.
后记
这一部分命令都属于高级命令,普通用户较难接触,加之本人也是自学,难免理解错误而误导大家,本不打算写的.考虑到指针的高效和在处理DLL对外输出的方便等.特别添加本章节,如有错误,还望批评指出,谢谢


下章预告:面对对象编程



鲜花

握手

雷人

路过

鸡蛋

相关阅读

相关分类

QQ|Archiver|手机版|小黑屋|吾爱分享资源网 ( 苏ICP备17042175号 | 苏公网安备 32108102010177号 )

GMT+8, 2018-10-15 19:39 , Processed in 0.260018 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部