黑马程序员技术交流社区
标题: 解决值传递和地址传递问题 [打印本页]
作者: 张斌黑马 时间: 2015-12-13 23:47
标题: 解决值传递和地址传递问题
黑马程序员--------------------------------我的疑问是值传递和地址传递都在别的函数进行的,值传递不可以改变数值号理解,地址传递为什么就改变了主函数的数值?
这个是地址传递,交换成功之后输出的数值会发生改变
#include <stdio.h>
//无返回值,有参数
void change(int* a,int* b){
int temp=0;
temp=*a;
*a=*b;
*b=temp;
printf("交换后的结果是:%d %d\n",*a,*b);
}
int main(int argc, const char * argv[]) {
int a=4;//定义变量
int b=5;//定义变量
change(&a,&b);//调用函数
return 0;
}
这个是值传递,交换之后输出的还是原来的值。
#include <stdio.h>
//无返回值,有参数
void change(int a,int b){
int temp=0;
temp=a;
a=b;
b=temp;
printf("交换后的结果是:%d %d\n",a,b);
}
int main(int argc, const char * argv[]) {
int a=4;//定义变量
int b=5;//定义变量
printf("%d %d\n",a,b);
return 0;
}
作者: huaizhexiwang 时间: 2015-12-13 23:47
因为地址传递实质上就是把要操作的变量的地址传到被调函数中进行操作,在被调函数中通过变量的地址可以拿到变量空间的值,然后进行修改。值传递只是把值传过去了,在被调函数中对这个值怎么操作都与主调函数的变量无关。
因为这个涉及到指针的问题,不知道我说清楚了没有,楼主可以私信我进行讨论哦,希望可以帮到你
作者: 鬼魅_vYpyK 时间: 2015-12-14 00:32
看不太懂
作者: cai602098596 时间: 2015-12-14 19:15
值传递是赋值 所以原来的变量的值不变 地址传值是引用同一个对象 所以会改变
作者: huaduwuzhe 时间: 2015-12-15 08:58
这是函数传参的特点,值传递是把实参的值传一个副本作为形参在函数中参加运算,这在内存中是不同的内存空间,只是值相同,改变副本形参的值对实参没有影响。但如果想要让被调函数改变调用函数结果的话就必须用到址传递了,将实参地址传给形参,即让形参指向实参,在内存中操作的话,它们其实指向同一个地址,同一个变量,形参改变,实参也跟着改变
作者: kingjacob 时间: 2015-12-15 19:49
楼主这个是C语言的指针,地址传递就是传递了值得引用,也就是指针,所以直接能改变数值。而值传递是不会变的。不知是否解答清楚?
作者: a393143670 时间: 2015-12-15 21:55
值传递是把变量a和变量b的值传递到子函数中,并不是把主函数中Int a和,int b传递到子函数中,所以调用函数是改变不了主函数中的打印结果的,因为主函数中的a和b并没有被改变过。
地址传递是传递一个指针,将指针指向的变量的内存中的空间的值,传入子函数中,子函数中是通过内存中的地址控制的值,这是指针的特性,也可以说,指针是直接在内存中改变的a和b的值。所以传递回来的值会改变。
作者: hard 时间: 2015-12-16 08:38
值是一个 赋值的过程,
地址的传递 new了一个对象,它的引用是不断变化的
作者: Deemons 时间: 2015-12-17 19:45
c语言中的重点,指针。主函数中,将a,b的地址传给change函数中的a,b。在change中a,b存储的是地址,而*则是取值运算符,即*a就等于主函数中的a
作者: 娜_娜 时间: 2015-12-17 22:56
这是指针,指针是可以改变他所指的存储空间的值的。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |