c语言
#include<stdio.h>int main()
{
int n1,n2,n3;
int *p1,*p2,*p3;
scanf("%d,%d,%d",&n1,&n2,&n3);
p1 = &n1;
p2 = &n2;
p3 = &n3;
if(n1>n2)swap(p1,p2);
if(n1>n3)swap(p1,p3);
if(n2>n3)swap(p2,p3);
printf("%d,%d,%d\n",n1,n2,n3);
}
swap(int *p1,int *p2) //这里的*p1,*p2和上面的*p1,*p2是一样的?或者是在swap函数里重新定义的,与上面无关,只是传值用?
{
int t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
都是指针变量,作用域不同;
名字一样不代码是同一个变量。 本帖最后由 jackz007 于 2020-3-7 00:07 编辑
swap(int *p1 , int *p2)
{
int t ;
t = *p1 ;
*p1 = *p2 ;
*p2 = t ;
}
p1、p2 出现在函数定义中,是函数 swap() 的输入参数,根据变量的作用域规则,p1 和 p2 仅与出现函数体内部的 p1、p2 有联系,与函数以外的同名变量没有任何关系,比如:
int a = 8 , b = 80 ;
swap(& a , & b) ;
在此例中,& a、& b 是调用 swap() 函数的实参,& a 取代形参 p1 , & b 取代形参 p2。 这里的*p1,*p2和上面的*p1,*p2是一样的?
不一样,性质不一样,一种是变量,一种是参数,顶多类型是一样的,都是int*
在swap函数里重新定义的,与上面无关,只是传值用?
你理解为两个int* 的容器,也就是p1,p2换成a1,a2,也一样有效,名称而已
页:
[1]