Llllln 发表于 2020-7-20 16:27:05

函数,指针

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

#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;
}

Llllln 发表于 2020-7-20 16:27:50

我试过是不对的

巴巴鲁 发表于 2020-7-20 18:06:15

本帖最后由 巴巴鲁 于 2020-7-20 18:07 编辑

你如果在r函数里定义成int *,是无法把值传过去的,因为这时是传值,形参无法传给实参
传地址是可以传过去的
你要是不使用函数这两种方法都行,用函数只能是传地址的方法

4goodworld 发表于 2020-7-20 20:29:13

Llllln 发表于 2020-7-20 16:27
我试过是不对的

你既然知道不对,那就说明这个不行呀
你交换指针,相当于把地址换了下,你改变了地址对应的值了吗?
好比,你有两个盒子,盒子里面有东西,你如果不打开盒子把里面的东西拿出来交换,你纯粹地把两个盒子移来移去,你觉得你能改变里面的东西吗?

chxchxkkk 发表于 2020-7-21 10:54:27

函数传值和传地址要搞清楚
页: [1]
查看完整版本: 函数,指针