Llllln 发表于 2020-6-30 19:04:33

函数与指针

#include <stdio.h>
void main()
{
        int a, b, * p1, * p2;
        voidex(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);
       
}
voidex(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 .    不知道对不对?

routty 发表于 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函数的形参

qiuyouzhi 发表于 2020-6-30 19:11:49

如果参数是一个指针的话,那么传入的应该是一个地址,而不是一个值(*p1 代表的是取出p1这个指针存放的值)。

永恒的蓝色梦想 发表于 2020-6-30 19:12:19

3L 正解

永恒的蓝色梦想 发表于 2020-6-30 19:13:04

routty 发表于 2020-6-30 19:11
这是对的

然而这是错的。

jhanker 发表于 2020-6-30 19:25:08

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估计就不会搞糊涂了
页: [1]
查看完整版本: 函数与指针