函数与指针
#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: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函数的形参 如果参数是一个指针的话,那么传入的应该是一个地址,而不是一个值(*p1 代表的是取出p1这个指针存放的值)。
3L 正解 routty 发表于 2020-6-30 19:11
这是对的
然而这是错的。 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]