黑马程序员技术交流社区

标题: 求助大神 [打印本页]

作者: bling的女汉子    时间: 2015-8-20 19:47
标题: 求助大神
函数的参数的传递过程不是很清楚,形参与实参之间是怎么传递值的
作者: Melody丶Zhy    时间: 2015-8-20 20:03
其实要理解局部变量,应该就能很好的理解形参和实参。局部变量就是{}里面的变量{}结束后那个变量就被销毁了,
举个栗子
在main函数中 定义两个局部变量 int a = 5; int b = 6; 然后定义一个方法 int add(int a, int b){ return a+b} 在主函数中调用这个方法并赋值给c int c = add(5,6)
当在主函数调用add(5,6)这个方法时,会进入int add(int a, int b)这个函数,这个函数中的a和b并不和主函数中的a和b在同一个存贮单元,可以理解为复制了一份给了函数int add(int a, int b)。
作者: 一个人の旋律    时间: 2015-8-20 20:16
例子如下:
void change(int n);
int main()
{
    int a=10;                                 //执行到此,为a变量分配一块内存空间,地址为: 0x7fff5fbff7e8
    change(a);                           //调用change函数,传递a变量的值,就是两个变量 a 和 n,传递参数过程就是好像 n=a,这么一个过程。
    return 0;
}

void change(int n)
{
    n=10;                                      //n为形参,也可以理解成一个变量,它也有自己的地址:0x7fff5fbff7c8
}
作者: tangbinbin    时间: 2015-8-21 09:01
分为地址的传递和值的传递
作者: smilejoke    时间: 2015-8-21 09:21
补充一下楼上所说,

传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。

传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。

传引用,实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。

说几点建议:
如果传值的话,会生成新的对象,花费时间和空间,而在退出函数的时候,又会销毁该对象,花费时间和空间。
因而如果int,char等固有类型,而是你自己定义的类或结构等,都建议传指针或引用,因为他们不会创建新的对象。
作者: findwhy    时间: 2015-11-4 13:19
地址传递和值传递
作者: wwf707542865    时间: 2015-11-4 14:25
简单点说,形参是函数后面()里面的参数,实参就是你调用函数的时候给他传的值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2