大家好,今天小编关注到一个比较有意思的话题,就是关于c语言 指针交换的问题,于是小编就整理了2个相关介绍c语言 指针交换的解答,让我们一起看看吧。
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语言在函数调用实参和行参时只能进行单独的“值交换”,所以即使用指针也要改为他的值去进行交换,这样才可以传进实参,进行交换,否则只能在调用函数中有效。
指针就是指向一段内存地址的空间。而内存地址的外在的表示就是整型数字,因此你将指针类型改成了整型,而程序并没有报错,这是没有问题的。
之前,你相当于将a的地址给了一个指针型变量,b的地址给了另外一个指针型变量,比较a和b的大小之后,将两个指针类型的变量通过另外一个指针型变量进行了交换,交换的实际上是两个指针型变量所指向的地址空间。
到此,以上就是小编对于c语言 指针交换的问题就介绍到这了,希望介绍关于c语言 指针交换的2点解答对大家有用。