鱼C论坛

 找回密码
 立即注册
查看: 3933|回复: 4

c语言关于指针的问题,让我郁闷了一小时,请看代码

[复制链接]
发表于 2013-3-25 19:52:57 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
int main()
{
int i,j,*p,*p1,*k;
scanf("%d%d",&i,&j);
p=&i;p1=&j;
if (*p<*p1)
{
k=p;
p=p1;
p1=k;
}
i=*p; &#8203;(这两句赋值导致了程序输出的错误性,不要这两句。输入2和3程序没有问题可以正常倒叙输出,加上这两句输出结果就错了,变成了3和3.求解释。。。)
j=*p1;
printf("%d %d",*p,*p1);
return 0;
}
这个程序也不难,但是我在应用中发现了个我不能解释的问题
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-25 20:21:17 | 显示全部楼层
首先这个程序如果输入的是i大于j,没有任何问题;
如果i<j,那么if语句里就要执行,
执行完之后p指向j的地址,p1指向 i 的地址,
那么接下来一句i=*p;  改变了i的值,而 i 现在等于*p1, 也就改变了*p1的值
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-25 20:39:35 | 显示全部楼层
我当然知道了改变了I的值了。。输出I,J的值都为3是怎么回事?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-25 23:43:33 | 显示全部楼层
i=*p; &#8203;(这两句赋值导致了程序输出的错误性,不要这两句。输入2和3程序没有问题可以正常倒叙输出,加上这两句输出结果就错了,变成了3和3.求解释。。。)
j=*p1;

i = *p,这时候说明 i = j, 然后你再j = *p1的话,不就是说j = i了吗? 结果两个值相同也没说明问题吧?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-25 23:57:10 | 显示全部楼层
其实这两句省去了就ok了吧
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-5 05:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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