• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

【活动】一般指针跟基于存储器的指针有什么区别?

SingleYork 2016-08-29 浏览量:1365
本帖最后由 SingleYork 于 2016-9-4 19:48 编辑

[postbg]bg7.png[/postbg]如题:


一般指针跟基于存储器的指针有什么区别?


温馨提示:

请从以下链接中的帖子学习相关内容并进行回答,其他地方得到的答案不能作为标准答案,仅能做为补充说明,七天之内答案不可见,答题的童鞋有七天时间修改答案,每周结贴一次,选择最佳答案。获得最佳答案的童鞋将会获得相应的专家积分,专家积分排行榜有丰厚的奖励哦!每周机会有限,请认真回答!




答案出处:


I51开发板活动原帖及例程详解汇总
//www.icxbk.com/community/forum.php?mod=viewthread&tid=65414
(出处: ICKEY BBS)

2 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 本帖最后由 荣丰宇 于 2016-8-29 22:39 编辑

    出处:
    I51开发板 第十讲:指针_单片机讨论_技术论坛_云汉电子社区
    //www.icxbk.com/community/fo ... 5775&extra=page%3D1

    这两种指针的区别在于它们的存储字节不同。一般指针在内存中占用3字节,第一个字节存放该指针的存储器类型编码(由编译时的编译模式确定),第二个和第三个字节分别存放该指针的高位和低位的地址偏移量。 一般指针可用于存储任何变量而不必考虑变量在8051单片机存储器空间的位置,许多C51库函数都采用了一般指针。
    默认情况下一般指针全部位移8051单片机的片内数据存储器中。如果在定义一般指针时带有“存储器类型2”选项,则可指定一般指针本身的存储器空间位置

    由于一般指针所指对象的存储器空间位置只有在运行期间才能确定,编译器在编译时无法优化存储方式,必须生产一般代码以保证能对任意空间中的对象进行存取,因此,一般指针所产生的代码运行速度较慢,如果希望加快运行速度则应采用基于存储器的指针。


    基于存储器的指针长度比一般指针短,可以节省存储器空间,而且运行速度快,但它所指对象具有确定的存储器空间,缺乏灵活性。

    一般指针与基于存储器的指针可以相互转换。在某些函数调用中进行参数传递时需要采用一般指针。

    需要注意的是,如果采用基于存储器的指针作为自定义函数的参数,而程序中又没有给出该函数的原型,则基于存储器的指针就自动转换为一般指针,假如在调用该函数时的确需要采用基于存储器的指针(其长度较短)作为传递参数,那么指针的自动转换就可能导致错误。


    • 发布于 2016-08-29
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:2
  • 一般指针与基于存储器的指针可以相互转换。在某些函数调用中进行参数传递时需要采用一般指针,例如,C51的库函数printf()、sprintf()、gets()等便是如此。当传递的参数是基于存储器的指针时,若不特别指明,Keil C51编译器会自动将其转换为一般指针。
    • 发布于2016-08-29
    • 举报
    • 评论 0
    • 1
    • 0

  • 本帖最后由 汉云 于 2016-8-29 22:37 编辑

    出处://www.icxbk.com/community/forum.php?mod=viewthread&tid=65775


    基于存储器的指针长度比一般指针短,可以节省存储器空间,而且运行速度快,但它所指对象具有确定的存储器空间,缺乏灵活性。

    一般指针与基于存储器的指针可以相互转换。在某些函数调用中进行参数传递时需要采用一般指针

    如果采用基于存储器的指针作为自定义函数的参数,而程序中又没有给出该函数的原型,则基于存储器的指针就自动转换为一般指针

    • 发布于2016-08-29
    • 举报
    • 评论 0
    • 1
    • 0

相关问题

问题达人换一批

【活动】一般指针跟基于存储器的指针有什么区别?