鱼C论坛

 找回密码
 立即注册
查看: 518|回复: 5

[已解决]函数与指针

[复制链接]
发表于 2020-6-30 19:04:33 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
void main()
{
        int a, b, * p1, * p2;
        void  ex(int * p1, int * p2);                //实现交换
        scanf("%d %d", &a, &b);
        p1 = &a;
        p2 = &b;
        if (a < b)
        {
                ex(p1, p2);
        }
        printf("%d,%d\n", a, b);
       
}
void  ex(int *p1, int *p2)
{
        int p;
        p = *p1;
        *p1 = *p2;
        *p2 = p;
}
大佬们,这个程序中if语句的ex(p1,p2)为什么不是ex(*p1,*p2)啊?这不是与函数ex的参数不一致吗?
我有一个想法是因为:p1=&a,p2=&b,所以ex(p1,p2)相当于ex(&a,&b),而&a就是*p1,&b就是*p2 .    不知道对不对?
最佳答案
2020-6-30 19:11:49
如果参数是一个指针的话,那么传入的应该是一个地址,而不是一个值(*p1 代表的是取出p1这个指针存放的值)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 19:11:23 | 显示全部楼层
本帖最后由 routty 于 2020-6-30 19:20 编辑
我有一个想法是因为:p1=&a,p2=&b,所以ex(p1,p2)相当于ex(&a,&b),而&a就是*p1,&b就是*p2 .    不知道对不对?

这是对的 但p1=&a的p1是main()函数里的p1,而&a就是ex函数定义的*p1,&b就是ex函数定义*p2的传入参数(实参);这里你说的p1,p2是ex函数的形参
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 19:11:49 | 显示全部楼层    本楼为最佳答案   
如果参数是一个指针的话,那么传入的应该是一个地址,而不是一个值(*p1 代表的是取出p1这个指针存放的值)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 19:12:19 | 显示全部楼层
3L 正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 19:13:04 | 显示全部楼层

然而这是错的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 19:25:08 From FishC Mobile | 显示全部楼层
routty 发表于 2020-6-30 19:11
这是对的 但p1=&a的p1是main()函数里的p1,而&a就是ex函数定义的*p1,&b就是ex函数定义*p2的传入参数(实参 ...

表达不清楚 确切讲应该说成&a是实参传给ex函数的形参p1,而这个p1不是main函数中的p1。如果把形参p1改成ptr1估计就不会搞糊涂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 11:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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