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这样的事情将完全失败,执行正确的转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |