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

简述什么是值传递,什么是地址传递,两者区别

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

我来回答

2个回答

懂视网 时间:2023-02-12 22:25

按值传递:在过程被调用时,传递给形参的是调用过程中的相应实参的值,形参与实参各占有不同位置的储存空间,被调用过程在执行过程中,改变了形参变量的值,但不会调用过程的实参值。 

  

  按地址传递:就是当调用一个过程时,是把实参变量的内存地址传递给被调用过程的形参,也就是说形参与实参使用相同地址的内存单元。因此当在被调用过程中改变形参的值,就等于改变了实参的值。

  

  按值传递时,实质上实参a只是把一个副本传递给形参x,也可以直接理解为传递的结果是让x*2中的x的值等于10(即a的值),乘以2后再赋值(赋值不用解释吧)给x,即实际上w方法的运算并没有对a本身进行操作。所以调用w方法前后a值始终等于10,而w方法得到的结果是20。

  

  按址传递时,实质上实参a是把指针(地址)传递给形参x,这个指针指向的地址的值即是10,此时a与x分别有一个指针同时指向10所在地址,即实际上w方法对a本身直接进行了操作(a自身参与运算)。所以调用w方法前后a值分别等于10和20,而w方法得到的结果是依然是20。

  

  

热心网友 时间:2023-02-12 19:33

值传递,传入变量的数值,函数不能改变变量的数值;地址传递,传入变量的地址,函数可以根据变量地址,访问变量,自然就能改变变量的值;数组传递,由于c语言数组和指针的处理方式一样,数组传递就等同于地址传递,函数可以根据地址,访问数组元素,自然就能改变数组元素的值。 #include "stdio.h"void fun1(int a)
{
a=1000;
}void fun2(int *p)
{
*p=1000;
}void fun3(int b[])
{
b[0]=1000;
b[1]=2000;
}void main()
{
int a=99;
int b[2]={1,2};
printf("a=%d\n",a);
fun1(a);/*值传递*/
printf("a=%d\n",a); fun2(&a);/*地址传递*/
printf("a=%d\n",a); printf("b[0]=%d b[1]=%d\n",b[0],b[1]);
fun3(b);/*数组传递*/
printf("b[0]=%d b[1]=%d\n",b[0],b[1]);}

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