老牛来学习 发表于 2020-3-6 22:58:10

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

ba21 发表于 2020-3-6 23:16:29

都是指针变量,作用域不同;
名字一样不代码是同一个变量。

jackz007 发表于 2020-3-7 00:01:42

本帖最后由 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。

4goodworld 发表于 2020-3-7 00:17:06

这里的*p1,*p2和上面的*p1,*p2是一样的?
不一样,性质不一样,一种是变量,一种是参数,顶多类型是一样的,都是int*
在swap函数里重新定义的,与上面无关,只是传值用?
你理解为两个int* 的容器,也就是p1,p2换成a1,a2,也一样有效,名称而已
页: [1]
查看完整版本: c语言