鱼C论坛

 找回密码
 立即注册
查看: 2137|回复: 5

指针问题

[复制链接]
发表于 2020-12-28 17:21:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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就单纯只是过渡作用,不会影响到它原来的值那些?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-28 17:32:21 | 显示全部楼层
本帖最后由 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 自然就是指向较大的那一个了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-28 17:49:17 | 显示全部楼层
jackz007 发表于 2020-12-28 17:32
你的理解是对的,在为一个指针所指内存赋值之前,必须要先指向一个同类变量的存储空间。

      在 ...

嗯嗯我知道,就是
p=p1;p1=p2;p2=p
这样一个交换的语句,先不管是不是指针变量,交换p1和p2后会影响p的值的吗?假设前面有定义p=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-28 18:08:16 | 显示全部楼层
本帖最后由 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 的数值在交换中会发生改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-28 18:15:33 | 显示全部楼层
jackz007 发表于 2020-12-28 18:08
p1、p2、p 作为指针它们本身都有自己的数值,这个数值就是内存地址,它们 3 个之间交 ...

我知道不可以,所以说先不管是不是指针变量呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-28 18:21:10 | 显示全部楼层
jackz007 发表于 2020-12-28 18:08
p1、p2、p 作为指针它们本身都有自己的数值,这个数值就是内存地址,它们 3 个之间交 ...

嗯嗯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 06:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表