C语言小白求助一道题!为什么第一代代码可以交换位置,第二段不行?

void fun(int *a,int *b)
{
    int k;
    k=*a;
    *a=*b;
    *b=k;}
void main()
{
    int a=2012, b=1,*x=&a,*y=&b;
    fun(x,y);
    printf("%d %d",a,b);
}

void fun(int a,int b)
{
    int k;
    k=a;
    a=b;
    b=k;}
void main()
{
    int a=2012, b=1;
    fun(a,b);
    printf("%d %d",a,b);
}

 

这是一个新手关怀问答题。

实参和形参的区别。

*这个是指针,&这个是引用。指针和引用的传递都不会创建变量副本,子函数里的变量跟你主函数的变量都是同一块内存地址。

第二个里面传递的是形参,子函数会创建变量副本,跟你主函数的变量都不是同一个东西。子函数结束后,形参的生命周期就结束了。