| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 493 人关注过本帖
标题:请问这个比大小的程序,问题出在哪里
只看楼主 加入收藏
cs081112
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2015-2-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
请问这个比大小的程序,问题出在哪里
#include<stdio.h>
void main()
{
    int change(int *point1, int *point2);
    int a, b;
    int *pointer_1, *pointer_2;
    printf("请输入两个数值:\n");
    scanf_s("%d%d", &a, &b);
    pointer_1 = &a;
    pointer_2 = &b;
    change(pointer_1, pointer_2);
    printf("a=%d,b=%d\n", a, b);
    printf("max=%d,min=%d\n", *pointer_1, *pointer_2);
    getchar();
    getchar();
}
int change(int *point1, int *point2)
{
    int *p;
    if (*point1<*point2)
    {
        p = point1;
        point1 = point2;
        point2 = p;
    }
    return 0;
}


调用函数完成后,但输出的结果是调用函数之前的。麻烦高手指导一下,本人新手。
搜索更多相关主题的帖子: include change 
2015-02-06 09:40
xufan
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:232
专家分:804
注 册:2008-10-20
收藏
得分:4 
程序代码:
int change(int *point1, int *point2)
{
    if (*point1 < *point2)
    {
        int nTemp = *point1;
        *point1 = *point2;
        *point2 = nTemp;
    }
    return 0;
}

~~~~~~我的明天我知道~~~。
2015-02-06 10:04
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:4 
int p
   if (*point1<*point2)
    {
        p = *point1;
        *point1 = *point2;
        *point2 = p;
    }
之前只是交换指针的地址。a,b值当然不变

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-06 10:04
cs081112
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2015-2-6
收藏
得分:0 
以下是引用xufan在2015-2-6 10:04:33的发言:

int change(int *point1, int *point2)
{
    if (*point1 < *point2)
    {
        int nTemp = *point1;
        *point1 = *point2;
        *point2 = nTemp;
    }
    return 0;
}

按这个改了,为什么a,b的值也交换了呢?不是只换了指针吗,a,b应该不变才对呢
现在是想通过交换指针来输出,但a,b的值不变,现在这样改后是直接交换了a,b

[ 本帖最后由 cs081112 于 2015-2-6 10:16 编辑 ]
2015-02-06 10:14
cs081112
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2015-2-6
收藏
得分:0 
以下是引用lovegh在2015-2-6 10:04:41的发言:

int p
   if (*point1<*point2)
    {
        p = *point1;
        *point1 = *point2;
        *point2 = p;
    }
之前只是交换指针的地址。a,b值当然不变


主 要是之前这个程序,我是想交换指针的,但a,b值肯定不会变,关键是调用完那个交换函数后,指针也没有交换呢
2015-02-06 10:15
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:4 
回复 5楼 cs081112
函数传入形参,会生成零时变量,在你这个代码中就是int *point1, int *point2,这2个零时变量
你在函数中只是交换了这2个临时变量的值,并没有交换pointer_1, pointer_2的值

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-02-06 10:31
cs081112
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2015-2-6
收藏
得分:0 
以下是引用young在2015-2-6 10:31:11的发言:

函数传入形参,会生成零时变量,在你这个代码中就是int *point1, int *point2,这2个零时变量
你在函数中只是交换了这2个临时变量的值,并没有交换pointer_1, pointer_2的值


大概明白这个意思了,那我就要在调用的函数中输出max,和min,感谢指导!
现在修改如下就可以了:
程序代码:
#include<stdio.h>
void main()
{
    int change(int *point1, int *point2);
    int a, b;
    int *pointer_1, *pointer_2;
    printf("请输入两个数值:\n");
    scanf_s("%d%d", &a, &b);
    pointer_1 = &a;
    pointer_2 = &b;
    change(pointer_1, pointer_2);
    printf("a=%d,b=%d\n", a, b);
    getchar();
    getchar();
}
int change(int *point1, int *point2)
{
    int *p;
    if (*point1<*point2)
    {
        p = point1;
        point1 = point2;
        point2 = p;
        printf("max=%d,min=%d\n", *point1, *point2);
    }
    else
    {
        printf("max=%d,min=%d\n", *point1, *point2);
    }
    return 0;
}
2015-02-06 10:41
快速回复:请问这个比大小的程序,问题出在哪里
数据加载中...
 
   



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

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