问一下一个数组复制问题。。

touchwhat 2009-03-01 11:33:39

#include<iostream>
#include<string>
using namespace std;
int main()
{
const int arr1_size=10;
int arr1[arr1_size];
for(int i=0;i<10;i++)
arr1[i]=i;
int *source=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);
int *dest=new int[arr1_size];
while(source!=arr1+arr1_size)
*dest++=*source++;
cout<<*dest<<endl;
delete dest;
}

这哪里错了?。。。输出不了dest的元素啊
...全文
101 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
touchwhat 2009-03-01
  • 打赏
  • 举报
回复
结果看来是一样的。。10个元素。。每个元素占4个字节 但是错误提示框该怎么解决?
touchwhat 2009-03-01
  • 打赏
  • 举报
回复
sizeof(arr1) 结果为40。。
sizeof(*arr1) 为4。。

arr1怎么会为40的
danxuezx 2009-03-01
  • 打赏
  • 举报
回复
问题出在这一句size_t sz=sizeof(arr1)/sizeof(*arr1);
把sizeof(arr1)和sizeof(*arr1)得到的值都打印出来看看都是对的吗?
touchwhat 2009-03-01
  • 打赏
  • 举报
回复
原来5楼已经说好了。。谢谢!但是还有个问题。。按找你的程序运行后弹出一个错误的对话框
touchwhat 2009-03-01
  • 打赏
  • 举报
回复
为什么要*(dest-1)啊?。。
touchwhat 2009-03-01
  • 打赏
  • 举报
回复
释放指针改成了delecte [] dest;

6楼定义的一个int *ar=dest;意义何在啊?。。我看不出来啊


#include<iostream>
#include<string>
using namespace std;
int main()
{
const int arr1_size=10;
int arr1[arr1_size];
for(int i=0;i<10;i++)
arr1[i]=i;
int *source=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);
int *dest=new int[sz];
while(source!=arr1+arr1_size)
{
*dest++=*source++;
cout<<*dest<<endl;
}
delete [] dest;
return 0;
}


我想在这基础上改下输出。。*dest++=*source++;不变。。怎么做呢 我这样做还是不行。。
  • 打赏
  • 举报
回复

int main()
{
const int arr1_size=10;
int arr1[arr1_size];
for(int i=0;i<10;i++)
arr1[i]=i;
int *source;
source=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);
int *dest=new int[arr1_size];
while(source!=arr1+arr1_size)
{
*dest++=*source++;
cout<< *(dest-1)<<endl;
}
delete []dest;
}

改成这样就可以输出全部内容了啊,你cout应该放在循环体里啊。
M_S_D_N 2009-03-01
  • 打赏
  • 举报
回复
改成啥样了?
HelloDan 2009-03-01
  • 打赏
  • 举报
回复

#include<iostream>
#include<string>
using namespace std;
int main()
{
const int arr1_size=10;
int arr1[arr1_size];
for(int i=0;i<10;i++)
arr1[i]=i;
int *source=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);
cout<<sz<<endl;
int *dest=new int[arr1_size];
int *at=dest;
while(source!=arr1+arr1_size)
{
*dest=*source;
cout<<*dest<<endl;
++dest;
++source;
}

delete at;

return 0;
}


  • 打赏
  • 举报
回复
while(source!=arr1+arr1_size)
*dest++=*source++;
cout<<*dest<<endl;
关键问题在这里你输出的是一个越界的指针指向的内容,
改成cout<<*(dest-1)<<endl;可以看到结果。
touchwhat 2009-03-01
  • 打赏
  • 举报
回复
恩。。改了。。现在怎么可以输出arr1数组的元素啊。。
  • 打赏
  • 举报
回复
先说一个问题。
int *dest=new int[arr1_size];
delete []dest; //delete []才对应

M_S_D_N 2009-03-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 M_S_D_N 的回复:]
cout < <*dest < <endl;
就输出第一个元素。
[/Quote]
不好意思,没看清楚,dest指针已经指向最后元素的后面了...
M_S_D_N 2009-03-01
  • 打赏
  • 举报
回复
cout<<*dest<<endl;
就输出第一个元素。
ts118 2009-03-01
  • 打赏
  • 举报
回复
楼主编码风格应该改改,看着太累。
问题出在这里
while(source!=arr1+arr1_size)
*dest++=*source++;
cout<<*dest<<endl;
在*dest++=*source++;后,这里的dest已经不是原来的dest了,而是dest+1,所以cout<< *dest<< endl;不是想要的结果,也因为如此,最终导致越界。

64,639

社区成员

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

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