指针问题
#include<stdio.h>main()
{
int *p1,*p2,*p,a,b;
scanf ("%d,%d",&a,&b);
p1=&a;
p2=&b;
if (a<b)
{
p=p1;p1=p2;p2=p;
}
printf("%d,%d",*p1,*p2);
}
代码如上,请问*p这个地方,我知道这是用来做中间变量,但是用p这个指针变量作中间变量的话,p指向的变量没有说明呀,有可能刚好指向一个有定义的地址,那这样不是会导致原来那个地址的变量改变了吗?还是说p就单纯只是过渡作用,不会影响到它原来的值那些? 本帖最后由 jackz007 于 2020-12-28 17:34 编辑
你的理解是对的,在为一个指针所指内存赋值之前,必须要先指向一个同类变量的存储空间。
在本例中,a 和 b 是目标变量,指针 p1 、p2 分别指向了 a、b 的存储地址,在检测到 a < b 的情况下,以指针变量 p 为中介,交换了 p1 、p2 的数值,使 p2、p1 分别指向 a 和 b。这样操作的结果,p2 指向了 a、b 中较小的那个变量,p1 自然就是指向较大的那一个了。 jackz007 发表于 2020-12-28 17:32
你的理解是对的,在为一个指针所指内存赋值之前,必须要先指向一个同类变量的存储空间。
在 ...
嗯嗯我知道,就是
p=p1;p1=p2;p2=p
这样一个交换的语句,先不管是不是指针变量,交换p1和p2后会影响p的值的吗?假设前面有定义p=1 本帖最后由 jackz007 于 2020-12-28 18:15 编辑
905853663 发表于 2020-12-28 17:49
嗯嗯我知道,就是
p=p1;p1=p2;p2=p
这样一个交换的语句,先不管是不是指针变量,交换p1和p2后会影响p的 ...
p1、p2、p 作为指针它们本身都有自己的数值,这个数值就是内存地址,它们 3 个之间交换数值,交换的是地址各自指向的内存地址。p 作为中介,不管以前是什么数值,在作过交换后,数值必然是要改变的。再说了 p = 1 的赋值是完全错误的,因为,用户不可以这样为一个指针进行赋值。因为事先无法确定这个内存地址是否实际存在和是否可访问。
在本例中, p 存在的价值和意义就是充当 p1、p2 交换数值的中介,所以,根本就不必在意 p 的数值在交换中会发生改变。 jackz007 发表于 2020-12-28 18:08
p1、p2、p 作为指针它们本身都有自己的数值,这个数值就是内存地址,它们 3 个之间交 ...
我知道不可以,所以说先不管是不是指针变量呀{:10_266:} jackz007 发表于 2020-12-28 18:08
p1、p2、p 作为指针它们本身都有自己的数值,这个数值就是内存地址,它们 3 个之间交 ...
嗯嗯
页:
[1]