有点复杂的问题,估计需要高手给解决以下了.哈哈.

yiruirui0507 2010-10-27 05:53:46
char buffer[256];
double *d;
d = new (buffer) double [3];
for(int i =0; i < 3; i++)
{
d[i] = i * 2.0;
cout << (double) (*(buffer + i * sizeof(double))) << endl;
输出 0 0 0
cout<<*((double *)(buffer + i * sizeof(double)))<<endl; 输出 0 2 4
麻烦大虾给分析以下原因,这里涉及的问题比较多,
比如在栈中动态分配内存,当然这个好处也是有的.
还有关于double在内存中的存储方式也涉及到了,总之希望高手给出比较详细的分析过程.先说3Q了!
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaneng 2010-11-07
  • 打赏
  • 举报
回复
还可以在栈中动态分配内存??学习了
gaomingok 2010-10-27
  • 打赏
  • 举报
回复
new 的函数用法
本例中 d = new (buffer) double [3] 与 d = (double*)buffer 应该是一个意思,有什么优点不清楚
0 内存 00 00 00 00 00 00 00 00
2 内存 00 00 00 00 00 00 00 40
4 内存 00 00 00 00 00 00 10 40
第一个cout 是先取第一个字节 然后 转换成double,所以都是0
第二个cout 就是输出double值了
qq120848369 2010-10-27
  • 打赏
  • 举报
回复
cout << (double) (*(buffer + i * sizeof(double))) << endl;

这个buffer是char*,*以后就是一个字节的东西,谁都不知道是什么东西,这是不对的.

第二种就对了,cout<<*((double *)(buffer + i * sizeof(double)))<<endl; 输出 0 2 4

将那个内存地址按照double的内存布局来解释,然后*就获取真正的值了.

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧