liyiqi 发表于 2019-11-28 16:46:23

为什么两个值没有交换

#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

windows 发表于 2019-11-28 17:15:06

来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{
      int p;
      p=*p1;
      *p1=*p2;
      *p2=p;
}

bin554385863 发表于 2019-11-28 17:21:48


请认认真真的再好好学一遍指针,不管是看视频查网站还是实体书,请你认真点好不好

liyiqi 发表于 2019-11-28 17:47:54

本帖最后由 liyiqi 于 2019-11-28 17:58 编辑

bin554385863 发表于 2019-11-28 17:21
请认认真真的再好好学一遍指针,不管是看视频查网站还是实体书,请你认真点好不好

我知道真么改,我需要把它讲清楚。谢谢你的提醒,但你要知道我的需求,而不是这样没有针对性的。还有我只是初步学习。

liyiqi 发表于 2019-11-28 17:53:37

windows 发表于 2019-11-28 17:15
来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{


谢谢,我知道怎么该。我需要错的原因

bin554385863 发表于 2019-11-28 18:39:03

#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:38:55

本帖最后由 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;
}

bin554385863 发表于 2019-11-28 23:36:44

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 01:06:52

本帖最后由 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;
}

大佬们勿喷,这只是我的想法,不对请指出。

q890712 发表于 2019-11-29 11:51:13

liyiqi 发表于 2019-11-28 21:38
对不起,复制的时后,少了一点应该是,请你再看一下。解释原因。

#include


你这代码我看了一下,在调用函数之后的printf语句根本就没有执行 ,所以你看到的还是输入的 58
页: [1]
查看完整版本: 为什么两个值没有交换