您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 值传 >

解释下 传值方式 和 传址方式

发布时间:2019-07-05 02:43 来源:未知 编辑:admin

  形参是在子程序或函数内运行的参数.实参在子程序和函数及整程序里都可以运行的参数.

  传值方式:向函数传递参数时,先复制一份参数,然后才将复制品传给参数。函数中所有对参数的操作,就只是在使用复制品。不会对改变传递前的参数本身。

  传址方式:将地址传送给函数,函数对该地址的内容操作,相当于对实参本身的操作。

  在一个程序运行时,程序会专门为参数开辟一个内存空间,称为“栈”。栈所在内存空间位于内存的低地址区。当程序需要传递参数时,将一个个参数“压入”栈区内存的底部,然后,函数再从栈区一个个读出参数。

  如果一个函数需要返回值,那么调用者首先需要在栈区留出一个大小正好可以存储返回值的内存空间,然后再执行参数的入栈操作。大都数编译器采用“从右到左的次序”将参数一个个压入。因此先将b压栈,再将a压栈。以下面这个程序为例。

  这是因为使用前一种形式容易出现问题,例如在skk_Argument Passing.cpp加入以下这2个程序段:

  swap1可以起到交换a,b的作用。swap2就不行了。因为本质上来说它们仍然是值传递,只不过这个值是地址,它们都不能改变自己参数本身(指针a和指针b)。swap2完全是一个传值调用。swap1虽然不能改变参数,但是指针太危险了,它间接改变了指针指向int 。因此在这种情况下,我们声明成:

  这就告诉该函数有可能改变传递来的变量的值。但是最好在调用的时候在后面注释,因为调用的时候是看不出的,例如调用swap1的时候为swap1 (&a,&b)可以很好给读程序的人提示信息,告诉我们参数可能被修改。调用swap3的时候就是swap3(a,b),无法给出信息,所以最好给注释。即便这样,我仍然偏爱swap3的写法。不过对非const引用参数是不允许做类型转换的,如果可以,那么这样做会毫无意义。因为类型转换的时候需要临时变量

http://abetterapp.com/zhichuan/213.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有