#include<stdio.h>
#define N 100
void main()
{
int i=0,j=0,x,c[N],tem;
int a[4]={0,1,2,3},b[2]={5,6};
for(x=0;x<6;x++)//对2个数组进行连接。成为一个数组
{
if(x=4){c[x]=b[j];j++;}
else {c[x]=a[i];
i++;}
}
for(x=0;x<6;x++)//连接后的数组为c[x]
printf("%d ",c[x]);
for(i=0;i<6,i++)//用起泡法对数组进行从大到小的排列
for(j=5;j>i;j--)
{
if(a[j]>a[j-1])
{
tem=a[j];
a[j]=a[j-1];
a[j-1]=tem;
}
}
for(x=0;x<6;x++)//最后排序后的结果为
printf("%d ",c[x]);
}
编译没错误,逻辑上错了吧!!!应该是在2个数组连接 的那个部分,麻烦帮忙看下
首先你不能直接用静态数组连接,因为你无法控制编译器如何分配内存,事实上分配在堆上的数组是由操作系统分配的,因此你不能指望两个数组是连续排列的,所以连接数组只能重新分配一个能包容两个数组元素的新数组,并将两个数组的元素复制过去,然后释放掉原先的数组。
用动态数组实现以下核心代码:
其中sizeof(int)取整型类型的字节宽度,当然你可以直接写4,但是不同编译器不同操作系统int类型的字节宽度可能不同,养成使用sizeof取类型宽度可以使你的代码具有很好的兼容性,减少意外。
复制后指向会改变,我们还需要将p返回给调用者,因此不可以直接使用p进行复制,需要建一个指针pp,复制p的值,利用pp复制数组。
pp+lenA可以让pp指向复制后的数组a的尾部,在后面的位置复制b数组。