【发布时间】:2018-04-10 10:34:07
【问题描述】:
我需要在一个函数中交换 2 个数组的值。问题是我可以改变主要的任何东西,只是函数本身。它应该接收 2 个整数数组,并交换它们。问题是,我不知道数组的大小,而且据我所知,它们甚至可以有不同的大小。试试这段代码:
int main()
{
int size = 4; //Please notice that I'm using this only to print the array
int a[] = {1,2,3,4};
int b[] = {5,6,7,8};
printArr(a,"a",size);
printArr(b,"b",size);
swapArray(a,b);
printf("Swapped:\n");
printArr(a,"a",size);
printArr(b,"b",size);
}
还有这个功能:
void swapArray(int **a,int **b)
{
int *p = *a;
*a = *b;
*b = p;
}
而 printArr 只是打印数组:
void printArr(int arr[],char name[],int size)
{
printf("%s:\t",name);
for(int i=0;i<size;i++){
printf("%d\t",arr[i]);
}
printf("\n");
}
我得到了一个非常奇怪的结果:
a: 1 2 3 4
b: 5 6 7 8
Swapped:
a: 5 6 3 4
b: 1 2 7 8
我想了解它发生的原因,而不仅仅是一个可行的解决方案。 谢谢你:)
【问题讨论】:
-
如果你启用编译器警告,那么你会从编译器那里得到一些关于你做错了什么的非常有用的信息,特别是关于你对
swapArray的调用(我很惊讶甚至编译)。 -
您确定您阅读的作业正确吗?像这样交换硬连线数组甚至没有意义,尽管交换指针(可以用作指向数组的指针)确实如此。