【C语言】交换函数-交换数组的内容(完整代码)

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

实现原理:与交换两个值的实现相同,就是通过地址传递,从而实现在交换函数中值的改变直接联动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;
    }

数组交换结果:
在这里插入图片描述
逐个值交换结果:
在这里插入图片描述
上面的两种方式,都可以实现交换数组中的值。但还是有区别的,当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;
    }

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值