A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张斌黑马

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 张斌黑马 初级黑马   /  2015-12-13 23:47  /  3529 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
黑马程序员--------------------------------我的疑问是值传递和地址传递都在别的函数进行的,值传递不可以改变数值号理解,地址传递为什么就改变了主函数的数值?
这个是地址传递,交换成功之后输出的数值会发生改变

#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;
}


最佳答案

查看完整内容

因为地址传递实质上就是把要操作的变量的地址传到被调函数中进行操作,在被调函数中通过变量的地址可以拿到变量空间的值,然后进行修改。值传递只是把值传过去了,在被调函数中对这个值怎么操作都与主调函数的变量无关。 因为这个涉及到指针的问题,不知道我说清楚了没有,楼主可以私信我进行讨论哦,希望可以帮到你 ...

9 个回复

倒序浏览
因为地址传递实质上就是把要操作的变量的地址传到被调函数中进行操作,在被调函数中通过变量的地址可以拿到变量空间的值,然后进行修改。值传递只是把值传过去了,在被调函数中对这个值怎么操作都与主调函数的变量无关。

因为这个涉及到指针的问题,不知道我说清楚了没有,楼主可以私信我进行讨论哦,希望可以帮到你
回复 使用道具 举报
看不太懂
回复 使用道具 举报
值传递是赋值 所以原来的变量的值不变       地址传值是引用同一个对象  所以会改变
  
回复 使用道具 举报
huaduwuzhe 来自手机 中级黑马 2015-12-15 08:58:30
报纸
这是函数传参的特点,值传递是把实参的值传一个副本作为形参在函数中参加运算,这在内存中是不同的内存空间,只是值相同,改变副本形参的值对实参没有影响。但如果想要让被调函数改变调用函数结果的话就必须用到址传递了,将实参地址传给形参,即让形参指向实参,在内存中操作的话,它们其实指向同一个地址,同一个变量,形参改变,实参也跟着改变
回复 使用道具 举报
楼主这个是C语言的指针,地址传递就是传递了值得引用,也就是指针,所以直接能改变数值。而值传递是不会变的。不知是否解答清楚?
回复 使用道具 举报
值传递是把变量a和变量b的值传递到子函数中,并不是把主函数中Int a和,int b传递到子函数中,所以调用函数是改变不了主函数中的打印结果的,因为主函数中的a和b并没有被改变过。
地址传递是传递一个指针,将指针指向的变量的内存中的空间的值,传入子函数中,子函数中是通过内存中的地址控制的值,这是指针的特性,也可以说,指针是直接在内存中改变的a和b的值。所以传递回来的值会改变。

回复 使用道具 举报
hard 中级黑马 2015-12-16 08:38:52
8#
值是一个  赋值的过程,
地址的传递 new了一个对象,它的引用是不断变化的
回复 使用道具 举报
Deemons 中级黑马 2015-12-17 19:45:31
9#
c语言中的重点,指针。主函数中,将a,b的地址传给change函数中的a,b。在change中a,b存储的是地址,而*则是取值运算符,即*a就等于主函数中的a
回复 使用道具 举报
这是指针,指针是可以改变他所指的存储空间的值的。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马