两组数组之间复制容易出错地方

目的是将,将数组arr1的数据复制到动态申请的空间里,并显示出来。


错语代码:

void main()

{

       int arr1[5]={1,2,3,4,5};
int *pa=arr1;
int *p=new int[5];


for(int i=0;i<5;i++)
*p++=*pa++;

        for(int i=0;i<5;i++)
cout<<*p++<<' ';

cout<<endl;


for(int i=0;i<5;i++)
cout<<*pa++<<' ';


delete []p;
_getch(); //输入任意键,返回系统 

return 0; 

运行结果: 显示出来的数据很大,不是原来数组arr1元素,而且运行时程序发生中止出错。

分析原因:

     原来是在

        for(int i=0;i<5;i++)
*p++=*pa++;

    运行后,指针p与指针pa所指向的地址都发生了改变,而不是指向数组arr1的首地址了。

   同时因为运行

    for(int i=0;i<5;i++)
cout<<*p++<<' ';

   后  超出p所指向的空间,所以发生中止。

正确修改如下:

void main()

{

     int arr1[5]={1,2,3,4,5};
int *pa=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);
int *p=new int[sz];
for(int i=0;i<5;i++)
*p++=*pa++;
for(int i=0;i<5;i++)
cout<<*(p-5+i)<<' ';//指向开始地址
cout<<endl;
pa=arr1;//重新指向数组arr1
for(int i=0;i<5;i++)
cout<<*pa++<<' ';
p-=5;//返回初值指针,不然运行delete []p;时中止
delete []p;
_getch(); //输入任意键,返回系统 

return 0;   
}


数组复制时,细节值得注意!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值