假设我有一个像这样声明的数组:
int *p = new int[size];
而p当然会点的第一个元素的地址.但由于一个字节是存储器的最小可寻址单位,p实际上是指向数组第一个元素的前4个字节的第一个字节吗?
a的地址int不一定char与其对象表示中第一个byte()的地址完全相同.这是因为某些机器具有缺少位的本机指针寄存器,这sizeof (char *) != sizeof (int *)是可能的.
但是,int *可以将其折叠为可转换为指向对象表示的第一个字节的指针static_cast< char * >( p ).您可以将结果指针传递std::memcpy给初始化另一个int或任何第一个成员为的POD类类型int.(因此,"第一个字节"被定义为具有最低地址的那个.)
对于您在通用计算中可能遇到的任何机器,char *并且int *在物理上是相同的; 它们之间的差异只是由编译器强制执行以实现代码安全性.但是确实存在异国情调的架构,static_cast在这种情况下会做出有意义的事情,reinterpret_cast而完全失败的事情会执行正确的转换.
| 归档时间: | 
 | 
| 查看次数: | 1085 次 | 
| 最近记录: |