网站首页 > 技术教程 正文
在编写个人函数的时候,你将会受到C++中的一条基本的原则的限制:在默认的情况下,变量只能以值传递的方式传递给函数。这句话的意思是:被传递到函数的只是变量的值,永远不是变量的本身。
例如:
[cpp] view plaincopyprint?
- void changeVar(int myVar,int newValue)
- {
- myVar=newValue;
- }
- int main(){
- int myNum=20;
- changeVar(myNum,90);
- std::cout<<myNum<<endl;
- return 0;
- }
结果为 20;
出现这种情况的原因是:在调用changeVar()函数时,程序只是把main()函数中的myNum变量的值赋值给了changeVar()函数中的myVar变量,它们是两个不同的变量。事实上,changeVar()函数完全不知道在main()函数中还存在一个myNum的变量,甚至连它的名字都不知道。
解决方法:
通过使用地址和指针
绕开“值传递”问题的第一个方法是向函数传递变量的地址而不是它的值。
[cpp] view plaincopyprint?
- int main()
- {
- int myNum=20;
- changeVar(&myNum,90);
- }
当然,changeVar()函数也要相应的改动。
[cpp] view plaincopyprint?
- void changeVar(int* myVar,int newValue){
- *myVar=newValue;
- }
现在可以得到预期的结果90了。
这种交换在很多的排序算法里都要用到。
提示:有时候,向函数传递地址是让函数接收一个复杂数据类型的唯一方法。
以“引用传递”方式向函数传递参数
既然像这样使用地址是一种很好的思路,让这个概念更加完善岂不是更好?如果事先知道某个函数只能接受一个地址,能不能按照某种套路来编写有关的代码以便在调用该函数时不需要使用特殊的语法呢?
引入引用传递方式输入参数。
引用的定义
int a = 100;
int& b = a;
b = 1000;
考察: (1)&a与&b的关系? (2) a=?
b现在是a的一个别名! a=1000;
1)引用必须在声明时立即初始化,不允许空引用
2)引用一旦初始化,就不能再引用其它数据
3)引用和被引用的变量实际上代表同一个内存的数据
引用的主要功能
传递函数的参数和返回值.C++中常用的方式有三种
值传递,指针传递和引用传递
引用传递的性质象指针传递,书写形式象值传递,
理由:如果只需要借用一下别名,就没必要用指针,.
void changeVar(int &myVar,int newValue);
这个函数第一个输入的参数不是一个指针,它是那个将被传递给这个函数的原始变量的一个别名。在changeVar()函数里对这个参数变量进行的任何操作都将反映在changeVar()函数外的那个原始变量身上。这意味着changeVar()函数与原来的一样。
void changeVar(int myVar,int newValue){
myVar=newValue;
}
这使得这个函数更容易被调用----只需要提供一个变量名;
int main(){
int myNum=20;
changeVar(myNum,90);
}
这比值传参语法上更简单了。
以“引用传递”方式把参数值传递给一个函数是C++的新增功能,这可以让函数的调用语法更加简单清晰。
提示:1.在定义函数时,还可以让它以“引用传递”方式而不是以“值传递”方式返回: int &myFuntion();
2.除了可以改变有关变量的值,“引用传递”方式的另一个好处是它的开销相对要小一些:因为不需要在函数里创建临时变量来容纳那些值,程序的内存占用量当然会小一些。
3.如果想获得“引用传递”方式带来的性能改善,但不想改变某个变量的值,可以把相应的输入参数定义为一个常量:
void myFunc(const int &myNum);
通过这样定义的函数,可以把具体的参数直接传递给它:myFunc(7);
猜你喜欢
- 2024-10-04 C++核心准则编译边学-F.43 永远不要返回局部对象的指针或引用
- 2024-10-04 C++|虚函数多态机制的虚函数表及其指针的内存布局及手动引用
- 2024-10-04 C|指针分类与void指针的赋值、解引用与算术运算
- 2024-10-04 第5课,引用方式(锁定) 锁定引用值
- 2024-10-04 C++函数参数采用变量、引用和指针的区别
- 2024-10-04 Java String 手工引用指针 java中指针和引用
- 2024-10-04 C++核心准则C.145:通过指针或引用访问多态对象
- 2024-10-04 C\C++语言11|引用做为函数参数与返回值及与指针的区别
- 2024-10-04 Excel中的引用方式,看过之后你就懂
- 2024-10-04 C++,常量及sizeof函数,传值调用、指针调用和引用调用的区别
你 发表评论:
欢迎- 07-03收到“老板”QQ指令转账,厦门多名财务人员被骗!
- 07-03手机QQ红包BUG 发送不能被领取的口令红包方法
- 07-03“老板”发QQ指令要求转账 财务被骗42万……最后民警出手了!
- 07-03微信推广引流108式:利用QQ自动强制加好友代码从网站导流
- 07-03围观!有人发现QQ新玩法,一天进账近百万!
- 07-03“领导”QQ发来指令 她就转出16万元
- 07-03如何自定义样式营销qq在线咨询代码
- 07-03利用代码发QQ空消息 只闪动没有消息内容
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)