两个printf输出的值为什么不一样
#include <stdio.h>int diaohuan(int x, int y);
void main()
{
int a, b;
scanf("%d,%d",&a, &b);
diaohuan(a, b);
}
int diaohuan(int x, int y)
{
int *p1, *p2, *p;
p1 = &x;
p2 = &y;
if(x < y)
{
p = p1;
p1 = p2;
p2 = p;
printf("大数是%d小数是%d\n",x, y);
printf("大数是%d小数是%d\n",*p1, *p2);
}
} #include <stdio.h>
int diaohuan(int x, int y);
void main()
{
int a, b;
scanf("%d,%d",&a, &b);
diaohuan(a, b);
}
int diaohuan(int x, int y)
{
int *p1, *p2, *p;
p1 = &x;
p2 = &y;
printf("大数是%d小数是%d\n",*p1, *p2);
if(x < y)
{
p = p1;
p1 = p2;
p2 = p;
// 这时
// p1 是p2存放的地址,也就是p2 = &x, *p2 == x
// p2 是p1存放的地址,也就是p1 = &y, *p1 == y
printf("大数是%d小数是%d\n",x, y);
printf("大数是%d小数是%d\n",*p1, *p2);
}
} 你交换了两个地址 BngThea 发表于 2018-6-7 09:17
你交换了两个地址
那按理说x 应该是等于*p1啊,y等于*p2那么
printf("大数是%d小数是%d\n",x, y);
printf("大数是%d小数是%d\n",*p1, *p2);
输出的结果不应该是一个吗?但是假如输入的是1和5,上边输出的是1,5,下面输出的是5,1,为啥 leihen0218 发表于 2018-6-7 14:29
那按理说x 应该是等于*p1啊,y等于*p2那么
printf("大数是%d小数是%d\n",x, y);
print ...
你交换了p1和p2的地址
此时p1指向的是y的地址,而p2指向的是x的地址
另外,不建议这样操作,直接交换地址往往是很危险的操作 BngThea 发表于 2018-6-7 14:49
你交换了p1和p2的地址
此时p1指向的是y的地址,而p2指向的是x的地址
那就是p1 == &y; p2 == &x 是不?但是x和y的值是没有变的 只是地址变了 是这个意思不? leihen0218 发表于 2018-6-7 14:57
那就是p1 == &y; p2 == &x 是不?但是x和y的值是没有变的 只是地址变了 是这个意思不?
可以这样理解 BngThea 发表于 2018-6-7 15:17
可以这样理解
好的 十分感谢,指针好难懂啊{:5_92:}
页:
[1]