欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言中两个数交换时使用指针交换的问题

程序员文章站 2024-03-07 20:19:21
...

今天在做C语言助教时,遇到了一个同学提出的问题:使用指针变量来交换2个指针的地址,然后将指针所指向的值赋给初始变量,为什么变量的值都为第二个变量。

她提供的代码如下:

#include<stdio.h>
int main(){
	int a = 1, b = 2;
	int *p = &a;
	int *q = &b;
	int *t;
	t = p;
	p = q;
	q = t;
	a = *p;	//	将交换地址后的地址所指向的值给a和b
	b = *q;
	printf("%d %d", a, b);
	return 0;
}

自己当时也纳闷了很久,按照思路,p和q交换地址后,指针p指向的值应该是b,指针q指向的值应该是a。然后再将b的值赋给a,a的值赋给b,最终会达到值交换的目的。

回到实验室,自己重新调试了一下,终于找到了原因。原来在执行

a=*p

后,a的值确实为2.但是此时*q指向的是a的值。因此此时*q应该也为a的值,所以*q=2,所以最终输出为2 2

反思:自己仍没有透彻理解C语言的指针,忘记了指针本质上还是地址,而不是一个储存值得变量。当两个指针同时指向一个变量,通过任一个指针改变值,那么另外一个指针所指向的内容也是改变的内容