为什么两个值没有交换
#include<stdio.h>void swap(int *p1,int *p2)
{
int p;
p=p1;
p1=p2;
p2=p;
}
int main()
{
int a,b;
int *pt1,*pt2;
scanf("%d%d",&a,&b);
pt1=&a;pt2=&b;
if(a<b)
swap(pt1,pt2);
printf("%d,%d",*pt1,*pt2);
return 0;
}
输入5,8,结果还是5,8 来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
请认认真真的再好好学一遍指针,不管是看视频查网站还是实体书,请你认真点好不好 本帖最后由 liyiqi 于 2019-11-28 17:58 编辑
bin554385863 发表于 2019-11-28 17:21
请认认真真的再好好学一遍指针,不管是看视频查网站还是实体书,请你认真点好不好
我知道真么改,我需要把它讲清楚。谢谢你的提醒,但你要知道我的需求,而不是这样没有针对性的。还有我只是初步学习。 windows 发表于 2019-11-28 17:15
来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{
谢谢,我知道怎么该。我需要错的原因 #include<stdio.h>
void swap(int *p1,int *p2)
{
int p;//-------p是普通变量
p=p1;//-----p1是指针变量
p1=p2;
p2=p; //p2是指针变量,p是普通变量
}
书上或者晚上网上或者视频,有说过指针变量和普通变量能够相互赋值么{:10_285:} 本帖最后由 liyiqi 于 2019-11-28 21:40 编辑
bin554385863 发表于 2019-11-28 18:39
#include
void swap(int *p1,int *p2)
{
对不起,复制的时后,少了一点应该是,请你再看一下。解释原因。
#include<stdio.h>
void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
int main()
{
int a,b;
int *pt1,*pt2;
scanf("%d%d",&a,&b);
pt1=&a;pt2=&b;
if(a<b)
swap(pt1,pt2);
printf("%d,%d",*pt1,*pt2);
return 0;
}
liyiqi 发表于 2019-11-28 21:38
对不起,复制的时后,少了一点应该是,请你再看一下。解释原因。
#include
你这是根本没弄懂指针的运算符
来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
你自己在好好学一下指针,在对照代码,如果还不明白,就查一下资料吧,我是会写不会说 本帖最后由 18780518304 于 2019-11-29 13:33 编辑
bin554385863 发表于 2019-11-28 23:36
你这是根本没弄懂指针的运算符
你自己在好好学一下指针,在对照代码,如果还不明白,就查一下资料吧,我是 ...
你好我是这么理解的:指针p可以看作存放地址的一个普通变量,
*p相当于调用p这个变量存的地址所指向存储器中的值
void swap(int *p1,int *p2) //传入两个指针;
{
int* p; //p ,p1,p2都是 存储地址值的普通变量;带上*号就可以指向他们地址存储的值了(5,8)
//交换普通变量的值(此时是地址值),并没有交换他们所指向的值(5,8)
//这样仅仅是将指针当普通变量使用了,但对于普通变量的实参传值给形参,
//其实只是将实参的副本传了进去,没有改变真正的实参值。
//所以并没有达到你想通过交换地址值来交换两个数的想法。
p=p1;
p1=p2;
p2=p;
}
//如果你用此方法将其写在主函数中就行
int main(){
int a,b;
int *pt1,*pt2;
scanf("%d%d",&a,&b);
pt1=&a;pt2=&b;
int *p;
if(a<b)
{
p=pt1;
pt1=pt2;
pt2=p;
}
printf("%d,%d",*pt1,*pt2);
return 0;
}
大佬们勿喷,这只是我的想法,不对请指出。 liyiqi 发表于 2019-11-28 21:38
对不起,复制的时后,少了一点应该是,请你再看一下。解释原因。
#include
你这代码我看了一下,在调用函数之后的printf语句根本就没有执行 ,所以你看到的还是输入的 58
页:
[1]