注册 登录
编程论坛 C语言论坛

求大神//【例7.3】即对输入的两个整数a和b,按大小顺序输出。要求用函数处理并以指针变量作为形参,在该函数中使较大的值存放在a中,小的值存放在b中并输出。求解

agoni68 发布于 2019-12-14 16:55, 4385 次点击
//【例7.3】题目要求同例7.2,即对输入的两个整数a和b,按大小顺序输出。要求用函数处理,在该函数中使较大的值存放在a中,小的值存放在b中。

程序运行不了,有错误,小白看不出来,求大神帮忙。
程序代码:
#include<stdio.h>
int main()
{
    void temp(int *p1,int *p2);
    int a,b,*x1,*x2;
    printf("a=");
    scanf("%d",&a);
    printf("b=");
    scanf("%d",&b);
    x1=&a;
    x2=&b;
    if(a<b)
    {
        temp(*x1,*x2);
        printf("max=%d,min=%d",*x1,*x2);
    }
    else
    {
        printf("max=%d,min=%d",*x1,*x2);
    }
    return 0;
}
void temp(int *p1,int *p2)
{
    int *p;
    p=p1;
    p1=p2;
    p2=p;
}
10 回复
#2
agoni682019-12-14 17:10
难道没人可以看出错误吗?,还是说错误太幼稚了不想回答?
#3
bcbbcclbbc2019-12-14 18:55
什么错误,不说清楚,让人怎么回答?
void temp(int *p1,int *p2)
{
    int *p;
    p=p1;
    p1=p2;
    p2=p;
}

自定义函数中,定义了一个指针,再把传递来的指针变量交换了一下位置,你想要有什么作用?
函数中指针作形参,可以用于改变指针所指向的内容。
#4
agoni682019-12-14 23:13
回复 2楼 agoni68
抱歉,下次一定说清楚,我想要用指针的形式交换值,然后以大到小输出。


[此贴子已经被作者于2019-12-14 23:55编辑过]

#5
rjsp2019-12-15 00:25
回复 4楼 agoni68
你应该描述一下你遇到的问题,比如“temp 函数并没有达到交换两个变量的目的”
void temp(int *p1,int *p2)
{
    int *p;
    p=p1;
    p1=p2;
    p2=p;
}
应当是
void temp(int *p1,int *p2)
{
    int t = *p1;
   *p1 = *p2;
   *p2 = t;
}

当然,你还是不符合题意,题意是
在该函数中使较大的值存放在a中,小的值存放在b中。

#6
agoni682019-12-15 16:16
回复 4楼 agoni68
受教了,那么为什么调用函数时temp(*x1,*x2);语句也错了呢?不懂其中的道理,希望能帮我解决,蟹蟹。


#7
wolf_555552019-12-15 23:22
函数申明请放在main函数外面,既上面!
#8
agoni682019-12-15 23:53
回复 6楼 agoni68
函数声明放在主函数开头没错,这是对的,我只是不懂在调用函数时temp(*x1,*x2);,为什么我加了*是错误的,正确的是不用加*。
能帮我解释下其中的道理吗??
#9
wolf_555552019-12-16 00:07
调用的函数将实参值传递给形参,应为形参需要传递的是地址,所以实参要传递存放这个值的(变量)得地址。
*x表示的是x地址存放的值,x才是存放的地址,所以不用*!
int*    x;意思是申请了一个int*型变量,既指针,x是这个变量的名字,      指针存的是地址,所以x变量存的就是地址,而*x是这个x地址变量所存储的值!

如果还不懂,建议在研究下指针的基础定义吧。
#10
rjsp2019-12-16 09:23
回复 6楼 agoni68
程序代码:
#include <stdio.h>

void foo( int* pa, int* pb )
{
    if( *pa < *pb )
    {
        int tmp = *pa;
        *pa = *pb;
        *pb = tmp;
    }
}

int main( void )
{
    int a, b;
    scanf( "%d%d", &a, &b );

    foo( &a, &b );
    printf( "%d %d\n", a, b );
}
#11
agoni682019-12-16 16:40
回复 8楼 agoni68
懂了,谢谢
1