新闻资讯

所在位置: 首页> 技术文章> 其它>
文章详情

巧用指针,提高程序工作效率

日期:2024-04-29 04:11
浏览次数:736
摘要:巧用指针,提高程序工作效率

  指针是CRBasic程序的一个非常强大的工具。合理使用指针,可以减少需要编写的代码数量,提高程序的工作效率并减少程序运行占用的数采内存。

  关于使用指针,首先要了解变量及其存储方式。在采集器中,变量存储在采集器内存的一些小内存单元中。采集器的内存由很多连续的内存单元组成,每个内存单元都有独一的地址。下文会运用一些类比的方法,帮助大家理解采集器如何使用内存。

 采集器内存使用

  首先我们把采集器的内存想象成一个可以存储很多东西的巨大仓库。我们要用不同大小型号的桶,把这个仓库装满。所有的桶又被用来装各种不同的东西,大桶装大件,小桶装小件。桶的数量及大小,取决于编写的程序和程序中变量的需求。当我们开始编写程序时,我们会定义变量。在上文的假设下,每定义一个变量,就需要使用一个桶(即内存单元)来存放变量。例如,一个小桶存放浮点数型的变量,它就占用了仓库(数采内存)大约4字节的空间。

  当桶放入仓库时,我们要给每个桶贴标签,便于后面找到桶。每个桶都有独一的地址,采集器的处理器可以根据标签,快速找到桶。例如,我们要找温度这个桶时,采集器就通过解码桶的地址,找到此桶以及桶里存放的变量信息,我们可进行读取或更改。

 指针的基础了解

  指针能够帮助仓库管理员(采集器处理器)更快捷的工作和更好的管理仓库空间。指针也是一个变量,它的值就是其他变量的地址。和其他变量或者常量一样,使用指针之前先进行定义。在CRBasic中,指针需要被定义为长整型。

  Public my_pointer As Long这一行代码用来定义指针变量。指针变量存储为要指向的其他变量的地址。

  使用或初始化新指针,需要在CRBasic中将其指向与温度变量相关联的特定内存段,可使用以下语法:

  my_pointer = @temperature

  现在温度的内存地址就被储存在my_pointer指针变量中了,@符号用来操作指针地址,它是一个一元运算符,返回它操作的内存地址。这样我们就可以在CRBasic进行其他操作了,举例说明:

Public my_pointer As Long

Public mike As Long, tom As Long, melissa As Long

my_pointer = @mike

mike = 42

tom = mike

melissa = my_pointer

  这个简短的 CRBasic程序,表述了以下事实:

• mike等于42

• 由于tom等于mike,所以tom也等于42

• melissa等于mike的存储地址

• melissa不等于42,它也是一个指针变量且和my_pointer相等。

  如果我们希望变量melissa包含与mike相同的值(不是mike的内存地址),我们需要使用指针取消引用或间接操作符。如下所示:

Public my_pointer As Long

Public mike As Long, tom As Long, melissa As Long

my_pointer = @mike

mike = 42

tom = mike

melissa = my_pointer

  您可能会说,直接让melissa等于mike不是更简单吗?大多数情况下是的,但使用指针可以改进和缩短程序,并节省宝贵的采集器内存。

  指针的使用

  使用指针,我们可以在一个if语句中实现从XML文件获取数据。

If xml_response_code = XML_END_OF_ELEMENT Then 

    pointer = 0 

    pointer = @(xml_element_name)
    If (pointer > 0) Then ! pointer = xml_value
EndIf

  我们所做的是声明要存储信息的变量,使用与XML文件中的元素相同的名称。利用采集器中的指针,使编程更加紧凑和精准。

  使用指针,程序像以前一样下载XML,并开始使用XML Parse()指令解析它。当它到*后一个元素时,就进入if条件语句。If句中的**行设置指向内存地址0的指针。这在程序使用中非常好用,因为采集器不会在内存地址0处返回变量信息。这可以帮助我们(和采集器)知道下一行代码中的取消引用是成功还是失败。下一行进行变量的指针地址的操作设置,该变量的名称与存储在变量xml_Element_name中的名称相同。

  变量名称xml_Element_name周围的括号告诉采集器不去查看XML_Element_Name的地址,而去查看XML_Element_Name中存储的内容。例如,当XML_Element_NAME=“相对湿度时,变量指针指向名为相对湿度的变量的内存地址,而不是指向XML_Element_Name这就是为什么变量名必须命名为与我们正在解析的XML文件中的元素相同的原因。语句中的*后一行表示,如果指针指向的内存地址不为零,则将xml_value中的信息导入指针所指向的地址的变量中。使用*前面的示例,存储在xml_value中的值将被转储到可变的相对湿度中,是不是很方便呢?

  如果您在使用仪器过程中,有任何疑问或意见,可以随时联系我们,010-88202236029-88426583

 

https://www.campbellsci.com/blog/pointers-make-crbasic-programs-efficient?

北京华益瑞科技有限公司刘阳翻译,并适当修改。

京公网安备 11010802025807号