C语言--指针交换两个变量

何为指针?指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

例如:

int *p;       //* 表示指针说明符:说明变量p是一个指针,只会在定义变量的时候出现

int a;

p = &a;       // &符号表示取a的地址,如果a是数组p=a,表示数组的首地址

a=5;          // *p  = 5;   *代表指针运算符,访问对应地址里面的内容

今天要说的是,两个变量之间的交换,用普通的变量和指针有何不同?先来看下面的一个例子:

这里提一下,关于交换变量的几种方法,详见C语言交换变量方法,这里就不再重复了。

#include<stdio.h>

void swap(int x,int y){
	//交换前的x,y 
	printf("x,y交换前: x = %d,y = %d\n",x,y);
	x^=y;
	y^=x;
	x^=y;
	//交换后的x,y 
	printf("x,y交换后: x = %d,y = %d\n",x,y);
}

int main(){
	int a=9,b=2;
	//交换前的a,b 
	printf("a,b交换前: a = %d,b = %d\n",a,b);
	swap(a,b);
	//交换后的a,b 
	printf("a,b交换后: a = %d,b = %d\n",a,b);
}

相信大家都很明白,这个方法无非就是交换a,b两个变量的值,但是,结果是怎样呢?

x,y的值发生了交换,但是a,b的值并未发生交换,这是因为我们只是将a,b的值作为一个参数传递到swap中,我们改变的只是函数swap里面的数据,若是要使a,b两个变量的值交换,需要怎么做呢?

这里,就要用到我们的指针了,其实,两个对比之后你会发现,代码几乎没变,只是之前是传入a,b的值,现在传的是a,b的地址。

#include<stdio.h>

void swap(int *x,int *y) {
	printf("x,y交换前: x = %d,y = %d\n",*x,*y);
	*x^=*y;
	*y^=*x;
	*x^=*y;
	printf("x,y交换后: x = %d,y = %d\n",*x,*y);
}

int main() {
	int a=9,b=2;
	printf("a,b交换前: a = %d,b = %d\n",a,b);
	swap(&a,&b);
	printf("a,b交换后: a = %d,b = %d\n",a,b);
}

接下来,来看看它的结果:

其实,这也不难理解,毕竟我传的是一个地址过去,地址里面的值发生改变,但是我a,b的地址并没有变,所以说a,b的值就也发生改变了。

猜你喜欢

转载自blog.csdn.net/weixin_38629529/article/details/82222878