在前面的博客中,我实现了一个交换两个值的函数,并简单介绍了值传递与地址传递的异同,还不清楚上面内容的可以点击查看【写一个交换函数】
在本篇分享的交换两个数组内容的函数,主要思想如下:

实现原理:与交换两个值的实现相同,就是通过地址传递,从而实现在交换函数中值的改变直接联动main函数中参数。

  1. 根据地址传递的特点:传递数组名,接收为数组的首地址(上篇博客有更多讲解)。
  2. 将数组中的元素逐个进行值交换(两个数组中元素个数相同)。

交换思想:与交换两个值的思想也相同,就是借用一个临时变量,为了不互相覆盖。
或者在这篇【交换函数三种思想】博客中,我介绍了其他的交换思想也可供参考使用。

一维数组中所有值的交换:完整代码

#define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    void Change(int *a, int *b)
    {
    	int t;      //t为临时变量
    	t = *a;
    	*a = *b;
    	*b = t;
    }
    int main()
    {
    	int A[5];
    	int B[5];
    	int i, j, k;
    	printf("请输入A数组的五个数:");
    	for (i = 0; i < 5; i++)
    	{
    		scanf("%d", &A[i]);
    	}
    	printf("\n请输入B数组的五个数:");
    	for (j = 0; j < 5; j++)
    	{
    		scanf("%d", &B[j]);
    	}
    	Change(A,B);     //直接数组交换
//    	for (k = 0; k < 5; k++)   //逐个值交换
//    	{	Change(&A[k], &B[k]);   	}
    	printf("\n输出交换后的A数组:");
    	for (i = 0; i < 5; i++)
    	{
            printf("%d  ",A[i]);
    	}		
    	printf("\n输出交换后的B数组:");
    	for (j = 0; j < 5; j++)
    	{
    		printf("%d  ",B[j]);
    	}
    	printf("\n");
    	return 0;
    }

数组交换结果:

ios 数组元素交换顺序_c++


逐个值交换结果:

ios 数组元素交换顺序_c++_02


上面的两种方式,都可以实现交换数组中的值。但还是有区别的,当A,B数组中元素相同时,我们用以上两种方法都能实现数组交换;而若两个数组中元素个数不相同时,我们只能用第一种,即直接交换数组指针指向的地址,因为这时用值挨个交换的话,会因为A,B中数组元素个数不同导致结果错误(程序可能会为元素较少的数组补充默认值)。

2021/12/10补充:用C语言实现二维数组中只交换某行的函数(列与列对应)

二维数组中某行值的交换:完整代码

#include <stdio.h>
    void Change(int *a, int *b)
    {
    	int t;      //t为临时变量
    	t = *a;
    	*a = *b;
    	*b = t;
    }
    int main()
    {
		int i, j, k;
    	int A[2][4];
    	int B[4][4];
    	printf("请输入A数组,按行输入2行4列:");
		for(i = 0 ; i < 2 ; i++)
		{
			for(j = 0 ; j < 4 ; j++)
				scanf("%d", &A[i][j]);
		}
		printf("\n请输入B数组,按行输入4行4列:");
		for(i = 0 ; i < 4 ; i++)
		{
			for(j = 0 ; j < 4 ; j++)
				scanf("%d", &B[i][j]);
		}
    	for(k = 0; k < 4 ; k++)  //k<4因为A,B数组都是4列
		{ Change(&A[1][k],&B[1][k]); }  //A[1][],B[1][]表示交换第二行的值(不能交换3,4行,因为A数组没有3,4行)
		
    	printf("\n输出交换后的A数组:\n");
    	for (i = 0; i < 2; i++)
    	{
			for(j = 0 ; j < 4 ; j++)
			{
				printf("%d ",A[i][j]);
			}
			printf("\n");
    	}		
    	printf("输出交换后的B数组:\n");
    	for (i = 0; i < 4; i++)
    	{
			for(j = 0 ; j < 4 ; j++)
			{
				printf("%d ",B[i][j]);
			}
			printf("\n");
    	}	
    	return 0;
    }

ios 数组元素交换顺序_i++_03