c语言指针交换,c语言指针交换变量a和b的值

kodinid 8 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言指针交换问题,于是小编就整理了3个相关介绍c语言指针交换的解答,让我们一起看看吧。

  1. 解释下为什么C语言中用函数交换两个数的值只能用指针,而不能用这个方法。还有如果用全局变量该怎么写?
  2. C语言二维数组如何交换两行或者两列?
  3. c语言递归实现倒置的流程?

解释下为什么C语言中函数交换两个数的值只能用指针,而不能用这个方法。还有用全局变量怎么写?

因为在函数中的参数,并不是调用者的变量,而是临时申请的变量a和b存放main函数中变量a和b的值,并在函数中用来计算,在fun中给a和b赋值都是在操作两个临时申请的变量,函数返回后,这两个变量被舍弃,函数调用也没有将这两个临时变量的值返回给main函数中调用使用的参数功能

所以,在函数中要操作调用者申请的变量,需要给出它们的指针,函数中用指针来找到这些变量的位置内容

c语言指针交换,c语言指针交换变量a和b的值-第1张图片-安济编程网
图片来源网络,侵删)

C语言二维数组如何交换两行或者两列?

方法有很多

1、可以直接找到数组对应行的元素进行交换数据,改变原数组内容。

2、可以定义指针数组指向每行的首地址,交换指针地址,按顺序打印每个指针为首的行数据,得到数据交换效果,原数组内容不变。我这里用第2种方法给你写了一个,你参考吧。#include <stdio.h>int main (){ int nArry[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}}; int *p[4],i,j,*ps***e,index[2];//p[]分别指向每行首地址 printf("打印原数组:"); i=16; p[0]=&nArry[0][0]; while(i-->0) { if((i+1)%4==0) printf("\n"); printf("%d ",*(p[0])); p[0]++; } while(1) { printf("\n\n输入2个你要交换的行号:"); scanf("%d%d",&index[0],&index[1]); for(i=0;i<4;i++) { p[i]=&nArry[i][0]; } ps***e=p[index[0]-1]; p[index[0]-1]=p[index[1]-1]; p[index[1]-1]=ps***e; printf("第%d行和第%d行调换后的数组为:\n",index[0],index[1]); for(i=0;i<4;i++) //按顺序打印 首地址指针开头的行数字 { for(j=0;j<4;j++) { printf("%d ",*(p[i]+j)); } printf("\n"); } } return 0;}

c语言指针交换,c语言指针交换变量a和b的值-第2张图片-安济编程网
(图片来源网络,侵删)

c语言递归实现倒置的流程?

C语言递归实现倒置的流程是通过递归函数实现。首先定义一个递归函数,这个函数的参数是一个指向需要倒置的数组的指针和数组的长度

在递归函数中,首先判断长度是否为0或1,如果是则直接返回,否则交换数组的第一个和最后一个元素,然后将指针向后移动一个位置,长度减小2,再次调用递归函数。直到长度为0或1时递归停止,整个数组就被倒置了。这样就实现了使用递归函数倒置数组的过程

到此,以上就是小编对于c语言指针交换的问题就介绍到这了,希望介绍关于c语言指针交换的3点解答对大家有用。

c语言指针交换,c语言指针交换变量a和b的值-第3张图片-安济编程网
(图片来源网络,侵删)

标签: 递归 数组 函数