| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3923 人关注过本帖
标题:求大神//【例7.3】即对输入的两个整数a和b,按大小顺序输出。要求用函数处理 ...
只看楼主 加入收藏
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
求大神//【例7.3】即对输入的两个整数a和b,按大小顺序输出。要求用函数处理并以指针变量作为形参,在该函数中使较大的值存放在a中,小的值存放在b中并输出。求解
//【例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;
}
搜索更多相关主题的帖子: 输出 存放 要求 函数 int 
2019-12-14 16:55
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
收藏
得分:0 
难道没人可以看出错误吗?,还是说错误太幼稚了不想回答?
2019-12-14 17:10
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
收藏
得分:2 
什么错误,不说清楚,让人怎么回答?
void temp(int *p1,int *p2)
{
    int *p;
    p=p1;
    p1=p2;
    p2=p;
}

自定义函数中,定义了一个指针,再把传递来的指针变量交换了一下位置,你想要有什么作用?
函数中指针作形参,可以用于改变指针所指向的内容。
2019-12-14 18:55
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
收藏
得分:0 
回复 2楼 agoni68
抱歉,下次一定说清楚,我想要用指针的形式交换值,然后以大到小输出。


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

2019-12-14 23:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:6 
回复 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中。

2019-12-15 00:25
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
收藏
得分:0 
回复 4楼 agoni68
受教了,那么为什么调用函数时temp(*x1,*x2);语句也错了呢?不懂其中的道理,希望能帮我解决,蟹蟹。


2019-12-15 16:16
wolf_55555
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:33
注 册:2019-6-14
收藏
得分:2 
函数申明请放在main函数外面,既上面!
2019-12-15 23:22
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
收藏
得分:0 
回复 6楼 agoni68
函数声明放在主函数开头没错,这是对的,我只是不懂在调用函数时temp(*x1,*x2);,为什么我加了*是错误的,正确的是不用加*。
能帮我解释下其中的道理吗??
2019-12-15 23:53
wolf_55555
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:33
注 册:2019-6-14
收藏
得分:6 
调用的函数将实参值传递给形参,应为形参需要传递的是地址,所以实参要传递存放这个值的(变量)得地址。
*x表示的是x地址存放的值,x才是存放的地址,所以不用*!
int*    x;意思是申请了一个int*型变量,既指针,x是这个变量的名字,      指针存的是地址,所以x变量存的就是地址,而*x是这个x地址变量所存储的值!

如果还不懂,建议在研究下指针的基础定义吧。
2019-12-16 00:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:4 
回复 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 );
}
2019-12-16 09:23
快速回复:求大神//【例7.3】即对输入的两个整数a和b,按大小顺序输出。要求用函 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016170 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved