鱼C论坛

 找回密码
 立即注册
查看: 678|回复: 4

[已解决]函数,指针

[复制链接]
发表于 2020-7-20 16:27:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
程序为从大到小输出两个整数,下面是正确的程序

#include <stdio.h>
int main()
{
        int a, b;
        int* p1, * p2;
        int r(int* p1, int* p2);
        scanf("%d,%d", &a, &b);
        p1 = &a;
        p2 = &b;
        if (a < b)
        {
                r(p1, p2);
        }
        printf("%d>%d", *p1, *p2);
        return 0;
}
int r(int* p1, int* p2)
{
        int p;                       //疑问1:这里可以是int *p吗?
        p = *p1;                  //疑问2:交换值的这三行可以是p=p1;p1=p2;p2=p吗?
        *p1 = *p2;
        *p2 = p;
}


也就是这个函数可以是这个吗?
int r(int* p1, int* p2)
{
        int *p;                  
        p = p1;                 
        p1 = p2;
        p2 = p;
}
最佳答案
2020-7-20 20:29:13
Llllln 发表于 2020-7-20 16:27
我试过是不对的

你既然知道不对,那就说明这个不行呀
你交换指针,相当于把地址换了下,你改变了地址对应的值了吗?
好比,你有两个盒子,盒子里面有东西,你如果不打开盒子把里面的东西拿出来交换,你纯粹地把两个盒子移来移去,你觉得你能改变里面的东西吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-20 16:27:50 | 显示全部楼层
我试过是不对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 18:06:15 | 显示全部楼层
本帖最后由 巴巴鲁 于 2020-7-20 18:07 编辑

你如果在r函数里定义成int *,是无法把值传过去的,因为这时是传值,形参无法传给实参
传地址是可以传过去的
你要是不使用函数这两种方法都行,用函数只能是传地址的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 20:29:13 | 显示全部楼层    本楼为最佳答案   
Llllln 发表于 2020-7-20 16:27
我试过是不对的

你既然知道不对,那就说明这个不行呀
你交换指针,相当于把地址换了下,你改变了地址对应的值了吗?
好比,你有两个盒子,盒子里面有东西,你如果不打开盒子把里面的东西拿出来交换,你纯粹地把两个盒子移来移去,你觉得你能改变里面的东西吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-21 10:54:27 | 显示全部楼层
函数传值和传地址要搞清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 19:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表