首页 资讯 应用 高压 设计 行业 低压 电路图 关于

单片机

旗下栏目: PLC 嵌入式 单片机 DCS

为什么KeilC51下char型指针是3个字节

单片机 | 发布时间:2018-11-05 | 人气: | #评论# | 本文关键字:keil,char,指针,字节
摘要:单片机中的sizeof的问题 是用KEILC51,单片机型号是AT89S52如下程序:char i,k,*p;i=6 ; p=i; k=sizeof p;DEBUG观察K的值,是0x03请问这是为什么?32位机指针大小是4,那么8位的单片机就应该是1啊” 在看到这

单片机中的sizeof的问题 
是用KEILC51,单片机型号是AT89S52如下程序:char i,k,*p;i=6  ; p=&i; k=sizeof p;DEBUG观察K的值,是0x03请问这是为什么?32位机指针大小是4,那么8位的单片机就应该是1啊”

    在看到这个问题时我也不知道KeilC51下char型指针的长度到底是多少,但肯定不是1。因为如果是1,那寻址空间就只有256,而51单片机的外部数据存储器是可以扩展到地址0xFFFF的。所以,指针变量的长度至少是2字节。另外,这里还要注意,在一个系统中,指针变量的长度跟具体的变量类型是无关的。那么,在KeilC51中指针变量的长度到底是多少呢?是不是像网友说的3个字节呢?

    实践是检验真理的唯一标准,把代码放到KeilC中一试便知。结果:真的是3字节,为什么?以前还从来没注意过这个问题。

image  
image 
    从以上两图可看出指针变量p确实分配了3字节空间。我想这肯定是为了寻址的需要,但是问什么系统的PC指针是16bit的呢?16bit的指针寻址空间是64K,如果使用外部扩展RAM,16bit也应该够了啊。难道是为了以后扩展更大的RAM?查看了ATMEL官方的datasheet,在memory部分也没有找到跟多线索。 
    接着我有试了使用AT89S51,看到的结果是一样的,也是3字节,看来内部架构应该是一样的。

    最终还是没能搞清楚原因。 不过今天也算高明了一个问题,那就是AT89S51单片机的指针变量是3字节。


责任编辑:KeilC51
首页 | 电气资讯 | 应用技术 | 高压电器 | 电气设计 | 行业应用 | 低压电器 | 电路图 | 关于我们 | 版权声明

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版 原创声明:本站大部分内容为原创,转载请注明电气自动化网转载;部分内容来源网络,如侵犯您的权益请发送邮件到[email protected]联系我们删除。