钻A 发表于 2019-11-16 16:45:37

指针问题

例题:运用指针,实三个整数从大到小排列。

为什么按照小甲鱼讲的打了,编译后没有结果显示?{:5_94:}

#include <stdio.h>

void main()
{
      void exchange(int *q1,int *q2,int *q3);
          
          int a,b,c,*p1,*p2,*p3;

          scanf("%d %d %d\n",&a,&b,&c);
      p1 = &a;
          p2 = &b;
          p3 = &c;

          exchange(p1,p2,p3);
          printf("%d %d %d\n",a,b,c);
}

void exchange(int *q1,int *q2,int *q3)//使得a>b>c
{
    void swap(int *pt1,int *pt2);

        if(*q1 < *q2)
        {
             swap(q1,q2);
        }
      if(*q1 < *q3)
        {
             swap(q1,q3);
        }
        if(*q2 < *q3)
        {
             swap(q2,q3);
        }

}

void swap(int *pt1,int *pt2)
{
   int temp;

      printf("Please waiting...\n");
       
        temp=*pt1;
      *pt1=*pt2;
      *pt2=temp;
}

jackz007 发表于 2019-11-16 17:04:20

本帖最后由 jackz007 于 2019-11-16 17:08 编辑

          这句代码有问题,格式描述字符串中不能出现回车符 '\n'。最好也不要出现空格、逗号之类,总之,越简单越好,可以避免意外。
          scanf("%d %d %d\n" , & a , & b , & c) ;
          改成下面这样:
          scanf("%d%d%d" , & a , & b , & c) ;
          改完代码就没问题了

          我把楼主的代码简化了一下,谨供楼主参考:
#include <stdio.h>

void swap(int * pt1 , int * pt2)
{
      int temp                      ;
      temp = * pt1                  ;
      * pt1 = * pt2               ;
      * pt2 = temp                  ;
}

void exchange(int * q1 , int * q2 , int * q3)
{
      if(* q1 < * q2) swap(q1 , q2) ;
      if(* q1 < * q3) swap(q1 , q3) ;
      if(* q2 < * q3) swap(q2 , q3) ;
}

int main(void)
{         
      int a , b , c                     ;
      scanf("%d%d%d" , & a , & b , & c)   ;
      exchange(& a , & b , & c)         ;
      printf("%d %d %d\n" , a , b , c)    ;
      return 0                            ;
}
         

bin554385863 发表于 2019-11-16 18:11:58

本帖最后由 bin554385863 于 2019-11-17 00:53 编辑

我很好奇你是从哪里学的在函数里面声明函数的

#include <stdio.h>
int * _swap(int *m, int *n)//如果第一个指针指向的值小于第二个,则交换值,并返回较大值的地址
{
    if (*m < *n)
    {
      int t = *m;
      *m = *n;
      *n = t;
    }
    return m;
}
void _exchang(int *i, int *j, int *k)//按降序排序
{
    _swap(_swap(i, k),_swap(j, k));
}
int main(int argc, char const *argv[])
{
    int a = 2, b = 3, c = 6;
    int *p1 = &a, *p2 = &b, *p3 = &c;
    _exchang(p1, p2, p3);//或者 _exchang(&a, &b, &c)
    printf("a = %d; b = %d; c = %d", a, b, c);
    return 0;
}
-------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-3gsuyw3d.on5 --stdout=Microsoft-MIEngine-Out-kkaa2ebb.w2a --stderr=Microsoft-MIEngine-Error-ho2pxkuk.1vk --pid=Microsoft-MIEngine-Pid-jip22v2u.4rt --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
a = 6; b = 3; c = 2
E:\Users\admin\Documents\VScode>
页: [1]
查看完整版本: 指针问题