加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 指针是否与字节地址相同?

发布时间:2020-12-16 09:45:53 所属栏目:百科 来源:网络整理
导读:假设我有一个像这样声明的数组: int *p = new int[size]; 而p当然会指向第一个元素的地址.但由于一个字节是存储器的最小可寻址单元,p实际上是指向数组第一个元素的前4个字节的第一个字节吗? 解决方法 int的地址不一定与其对象表示中第一个字节(char)的地址
假设我有一个像这样声明的数组:

int *p = new int[size];

而p当然会指向第一个元素的地址.但由于一个字节是存储器的最小可寻址单元,p实际上是指向数组第一个元素的前4个字节的第一个字节吗?

解决方法

int的地址不一定与其对象表示中第一个字节(char)的地址完全相同.这是因为一些机器具有缺少位的本机指针寄存器,因此sizeof(char *)!= sizeof(int *)是可能的.

但是,对此进行折扣,int *可通过static_cast<转换为指向对象表示的第一个字节的指针. char *>(p).您可以将结果指针传递给std :: memcpy以初始化另一个int或任何第一个成员为int的POD类类型. (因此,“第一个字节”被定义为具有最低地址的那个.)

对于您在通用计算中可能遇到的任何机器,char *和int *在物理上是相同的;它们之间的差异只是由编译器强制执行以实现代码安全性.但是确实存在异构体系结构,其中static_cast在这种情况下做了一些有意义的事情,而像reinterpret_cast这样的事情将完全失败,执行正确的转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读