c语言,连接2个数组的方法???

  1. 首先你不能直接用静态数组连接,因为你无法控制编译器如何分配内存,事实上分配在堆上的数组是由操作系统分配的,因此你不能指望两个数组是连续排列的,所以连接数组只能重新分配一个能包容两个数组元素的新数组,并将两个数组的元素复制过去,然后释放掉原先的数组。

  2. 用动态数组实现以下核心代码:

    int * Link(int *a,int lenA,int *b,int lenB) {
        int *p=new[lenA+lenB];//新建一个数组,数组大小为两数组总和
        int *pp=p;//运算指针
        //复制数组不要自己使用循环,那样效率很低,应该采用库函数中的memcpy。
        memcpy(pp,a,lenA*sizeof(int));//将数组a复制到新建内存首地址
        memcpy(pp+lenA,b,lenB*sizeof(int));//将数组b复制到前数组尾部
        //如果需要,释放数组a和b,当然如果是静态分配的数组,下面两句可注释掉
        delete []a;
        delete []b;
        return p;
    }


    其中sizeof(int)取整型类型的字节宽度,当然你可以直接写4,但是不同编译器不同操作系统int类型的字节宽度可能不同,养成使用sizeof取类型宽度可以使你的代码具有很好的兼容性,减少意外。
    复制后指向会改变,我们还需要将p返回给调用者,因此不可以直接使用p进行复制,需要建一个指针pp,复制p的值,利用pp复制数组。
    pp+lenA可以让pp指向复制后的数组a的尾部,在后面的位置复制b数组。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值