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语言的指针,忘记了指针本质上还是地址,而不是一个储存值得变量。当两个指针同时指向一个变量,通过任一个指针改变值,那么另外一个指针所指向的内容也是改变的内容
上一篇: linux配置jdk环境变量简单教程
下一篇: 简单讲解Java的Future编程模式
推荐阅读