崔铭1315 发表于 2020-8-5 14:55:23

调用swap函数,交换主函数中变量x和y中的数据。

调用swap函数,交换主函数中变量x和y中的数据。
#include<stdio.h>
void swap(int *,int *);
main()
{
int x=30,y=20;
printf("(1)x=%dy=%d\n",x,y);
swap(&x,&y);
printf("(4)x=%dy=%d\n",x,y);
}
void swap(int *a,int *b)
{int t;
printf("(2)a=%db=%d\n",*a,*b);
t=*a;*a=*b;*b=t;
printf("(3)a=%db=%d\n",*a,*b);
}
运程序行结果如下:
(1)x=30y=20
(2)a=30b=20
(3)a=20b=30
(4)x=20y=30

    为什么(4)的值会改变
    通过传送地址的方式在被用函数中直接改变函数中的变量的值,我理解不了这句话,{:5_94:}

xiaosi4081 发表于 2020-8-5 14:56:24

本帖最后由 xiaosi4081 于 2020-8-5 14:58 编辑

通过传送地址的方式在被用函数中直接改变函数中的变量的值

传过去swap函数中的参数是两个指针,指针指向的那个变量的内容,在swap中被重新赋值

zltzlt 发表于 2020-8-5 14:57:21

本帖最后由 zltzlt 于 2020-8-5 15:02 编辑

因为传送的是指向原变量的指针,在函数中修改指针指向的变量的值,而传值就相当于复制一份变量的值再传进函数

sunrise085 发表于 2020-8-5 15:04:35

本帖最后由 sunrise085 于 2020-8-5 15:09 编辑

给你看一个我之前写的图
上半部分是值传递,
下半部分是址传递,也就是你的程序中的这种方式。

qiuyouzhi 发表于 2020-8-5 15:05:19

假如你是按值传递参数的话,传入的将会是一个副本,你改副本的话,不会改本体。
但你要是按地址传递参数的话,传入的将会是一个地址,它不是副本,就是本体,
所以可以改本体。

jackz007 发表于 2020-8-5 15:06:40

      swap() 接收到的是 2 个装有货物的盒子,它的工作就是将两个盒子里的货物进行对换。所以,你会看到,调用 swap() 之后,两个变量(x , y)的值发生了交换。
页: [1]
查看完整版本: 调用swap函数,交换主函数中变量x和y中的数据。