函数参数的不同和“夸张”的引用
来源:互联网 发布:adsl拨号软件 编辑:程序博客网 时间:2024/04/30 00:57
函数的形参的可能性有,变量,指针,数组和引用。
先来看变量。
int fun(int a,int b) 例如此函数形参是两个变量,它们的存储地址和主调函数里的实参是不同的,所以
{ 改变了形参的大小,并不会改变实参的大小。但为什么分配的内存不同,还可以把返回值带回?
int c; 这是因为在return C时,这个值返还给了EAX,通过此寄存器将值给主调函数。由此可以看出,
c=a+b; 其实并没有影响或干预fun函数里面变量的生存期。
return c; 有的人或许会问,那我想通过调用函数改变主调函数的值怎么办啊?
}
这就谈到了传址调用。
什么是传址调用那?
就是形参是一个指针,他接受的是一个地址。当它是数组的时候,它退化成了一个指向数组首元素的地址的指针;指针就是指向实参的地址;在这里
要重点说说引用的作用。
引用的符号是&,那系统什么时候认为它是引用那?
当&符号在两个变量之间时,系统就把它定义为位运算符,当&符号在赋值运算符和一个变量或数组的中间时,就是取其地址,当&在一个类型名和一个变量中间
时,就代表了引用。
引用代表什么意思那?
就比如一个人叫林浅雪,她的小名叫小雪,引用就相当于她的别名,我们可以通过小雪找到她,也可以通过她的大名找到她。
当引用作为形参时,编译器就会将其变成,指针的形式,就相当于 (类型)*const 变量 形式。由此可以看出,它的指向不可以变,但是它指向的内容却可以变。
那引用有什么限制?
1: 引用没有二级,或者说三级。
2:引用在定义的时候必须初始化。
可能有人会问,不是说引用在定义的时候必须初始化,那当引用是形参的时候不是就没有初始化了吗?
6: int *b=&a;
012D15F5 lea eax,[a]
012D15F8 mov dword ptr [b],eax
7: int &c=a;
012D15FB lea eax,[a]
012D15FE mov dword ptr [c],eax
012D15F5 lea eax,[a]
012D15F8 mov dword ptr [b],eax
7: int &c=a;
012D15FB lea eax,[a]
012D15FE mov dword ptr [c],eax
如图:是反汇编里面对引用的处理,由此可以看出,编译器把引用与指针做了一样的处理。
阅读全文
0 0
- 函数参数的不同和“夸张”的引用
- 交换函数的两种不同的实现方式------地址传递和引用参数
- 交换函数的两种不同的实现方式------地址传递和引用参数
- 夸张的MBA联考
- 夸张的扩容盘!
- 使用指针类型参数和使用指针引用类型参数在函数内部用new给参数分配空间的不同结果
- 函数返回值和返回引用是不同的
- 函数的参数为对象本身和对象的引用【函数参数为引用】
- 指针与引用做参数的不同
- 函数参数的引用问题&
- 函数的参数为引用和指针的区别
- lua中的handler和function()作为函数参数的不同
- Java和C++在函数参数传递上的不同
- 关于Java的引用和函数参数传递
- Java函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- Perl函数参数中传递数组和引用的使用
- Perl函数参数中传递数组和引用的使用
- 【Android】理解活动的生命周期
- 微信再发大招!原创保护上线新分享样式
- 死咬苹果,三星也正式宣布自研手机GPU
- 大疆退出中国市场?到底谁传的
- java 大整数开方模板与常用方法
- 函数参数的不同和“夸张”的引用
- ZOJ 1058
- java3
- javascript的console对象
- web网站布置到云服务器上
- 动态规划--多段图最短路径
- ZEALER布局短视频MCN,优质的泛科技视频都在这里
- Google李飞飞:视觉将成为AI的“杀手级应用”
- MYSQL 备份还原