作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里 (double*) 的目的是什么?我的理解是:
double d1 = *&a;
将给我 a 地址处的值,但添加 (double*) 会将值 1.4854e-313 存储到 d1 中。为什么是这样?什么是双关语?另外,我是否从未分配的内存中写入或读取?
int main () {
int a = 17;
double d1 = *(double*)&a ;
std :: cout << "\na = " << a << ", &a = " << & a ;
std :: cout << "\nd1 = " << d1 << ", &d1 = " << & d1 ;
}
最佳答案
这是类型双关,但也是未定义的行为。 int
在大多数平台上与 double
的大小不同,这意味着将 int
指针转换为 double
指针,然后从中读取,将从您不应访问的堆栈数据中读取。
从字面上看,正在发生的事情是 d1
被分配存储在 a
处和周围的位。因为这些位是任意的(并且可能从堆栈中读取垃圾),所以它的值可以是任何东西。
不言而喻,您不应该这样做。 Type-Punning 只是在理想情况下几乎没有定义的行为,绝对不会使用您在此处使用的方法。
关于c++ - *(double*)&a 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50419567/
我是一名优秀的程序员,十分优秀!