首页 热点资讯 义务教育 高等教育 出国留学 考研考公

C语言值传递和地址传递 不明白

发布网友 发布时间:2022-04-26 16:05

我来回答

2个回答

热心网友 时间:2023-01-21 18:35

1)void swap(int a, int b)的参数属于值传递;

2)值传递需要一个中间变量,以你的程序为例:

    swap(x,y);

    它的实际过程是,先分配两个临时变量,a和b,这两个变量和传入的x、y占用不同的地址空间,程序先将x和y的值复制给a和b:

    swap(a = x, b = y),之后在swap中所有的操作都是针对a和b进行的,与x和y无关,所以x和y的值在swap执行后依然保持不变。

3)地址传递也需要一个中间变量,但是这个中间变量保存的是地址,对于C语言你就需要用到指针变量,它可以保存一个普通变量的地址,通过改变这个地址里的内容就可以改变原变量的值。对于你的程序,如果想在调用swap后,x和y的值被改变,你需要定义成下面的样子:

#include <stdio.h>
void swap(int *,int *);//参数里的*号表示指针
void main()
{
int x=10,y=20;
printf("(1)a=%d y=%d\n",x,y);
swap(&x,&y);//x和y按地址传入
printf("(4)x=%d y=%d\n",x,y);//按地址传入,x和y的值被swap改变
}

void swap(int *pa, int *pb)//函数形参变成指针

{
int t;
printf("(2)a=%d b=%d\n",*pa,*pb); //访问指针的内容需要在指针前加*号
t=*pa;
*pa=*pb;
*pb=t;
   printf("(3)a=%d b=%d\n",*pa,*pb);
}

}

3)关于指针的详细内容,由于篇幅有限,请参看C语言资料的相关章节。

热心网友 时间:2023-01-21 19:53

void swap (int a,int b)里的a和b都是值传递。


值传递意味着,void main()在调用swap(x,y)时,是将x变量和y变量拷贝了一个副本,然后将副本传给swap作为a变量和b变量。


传入时,从数值上来讲,有a=x和b=y;但是当a、b的数值发生改变时,x、y的数值是不会变化的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com