作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在一次采访中看到了这段代码。
int main()
{
int **p;
p = (int **) new int(7);
cout<<*p;
return 0;
}
我原以为 *p 会出现一些运行时错误。但是当我运行代码时,它成功执行并输出“0x7”。有人可以向我解释这是如何工作的吗?谢谢。
最佳答案
正确的答案是以上都不是,除非给你一些额外的限制。基本上,代码分配一个 int
并将该内存解释为一个 int*
(通过 reinterpret_cast
)。第一个问题是,作为一个reinterpret_cast
,结果在一般情况下是unspecified,如果int
的大小小于int*
的大小(考虑 64 位架构)结果是未定义的行为,因为您正在读取超出 new
调用中分配的大小。
关于c++ - 将 ptr 显式转换为 "ptr to a ptr",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10164764/
我是一名优秀的程序员,十分优秀!