jsyzzyjd 发表于 2021-3-25 18:02:32

萌新请教C语言指针问题

#include <stdio.h>

/*int swap(int i,int j)
{
      int t;
      t=i;i=j;j=t;
      printf("in function i=%d,j=%d\n",i,j);
}
int main()
{
         int i=4,j=9;
         swap(i,j);
         printf("out function i=%d,j=%d\n",i,j);
}*/

void swap(int p1,int p2)
{
         int t;
         t=p1;
         p1=p2;
         p2=t;
}

int main()
{
      int a,b;
      printf("请输入a和b");
      scanf("%d %d",&a,&b);
      printf("交换前a=%d b=%d\n",a,b);
      swap(a,b);
      printf("交换后a=%d b=%d\n",a,b);
}



萌新想请教一下为啥同样是交换的函数,swap函数中只是void和int的区别。可是两个结果完全不同,一个可以成功交换位置,一个却不会交换两个变量。

void swap(int *p1,int *p2)
{
         int t;
         t=*p1;
         *p1=*p2;
         *p2=t;
}

int main()
{
      int a,b;
      printf("请输入a和b");
      scanf("%d %d",&a,&b);
      printf("交换前a=%d b=%d\n",a,b);
      swap(a,b);
      printf("交换后a=%d b=%d\n",a,b);
}

如果给swap函数中的变量变成指针,却可以进行交换。这又是为啥啊。

qiuyouzhi 发表于 2021-3-25 18:21:51

和int,void没关系
传入一个指针,操作的是地址,可以改变传入参数的值
而传入一个值,操作的是它的拷贝,是不可以改变的

jsyzzyjd 发表于 2021-3-25 18:37:24

qiuyouzhi 发表于 2021-3-25 18:21
和int,void没关系
传入一个指针,操作的是地址,可以改变传入参数的值
而传入一个值,操作的是它的拷贝 ...

好像有点明白,是不是a跟b虽然经过函数交换了,但是交换后的值没有重新赋值给我输入的a和b,以至于下面输出的a和b还是输入的值,因为指针指的是地址,地址交换了,所以对应值也变化了。然后输出的值就变化了

qiuyouzhi 发表于 2021-3-25 18:40:10

jsyzzyjd 发表于 2021-3-25 18:37
好像有点明白,是不是a跟b虽然经过函数交换了,但是交换后的值没有重新赋值给我输入的a和b,以至于下面输 ...

差不多了
页: [1]
查看完整版本: 萌新请教C语言指针问题