C++按值传递详解
我们知道,形参是在函数定义的括号内定义的专用变量,它们的目的是保存按实参传递给它们的信息,实参被列在函数调用语句的括号内。
通常,当信息被传递给一个函数时,采用按值传递的方式,这意味着形参接收的是传递给它的值的副本。如果形参的值在函数内部被改变,那么它对原始实参是没有影响的。下面的程序演示了这个概念。
并且,即使在 changeMe 函数中形参变量 myValue 已更改,实参 number 也不会被修改。这是因为 myValue 变量只包含了 number 变量的副本。只是这个副本被改变,而不是原来的。changeMe 函数无法访问原始实参。图 1 说明了形参变量在内存中的存储位置与原始实参的存储位置是分开的。
图 1 原始实参和函数形参在内存中是分开存储的
通常,当信息被传递给一个函数时,采用按值传递的方式,这意味着形参接收的是传递给它的值的副本。如果形参的值在函数内部被改变,那么它对原始实参是没有影响的。下面的程序演示了这个概念。
#include <iostream> using namespace std; // Function Prototype void changeMe(int aValue); int main() { int number = 12; // Display the value in number cout << "In main number is " << number << endl; //Call changeMe, passing the value in number as an argument changeMe(number); // Display the value in number again cout << "Back in main again, number is still " << number << endl; return 0; } void changeMe(int myValue) { //Change the value of myValue to 0 myValue = 0; //Display the value in myValue cout << "In changeMe, the value has been changed to " << myValue << endl; }程序输出结果:
In main number is 12
In changeMe, the value has been changed to 0
Back in main again, number is still 12
并且,即使在 changeMe 函数中形参变量 myValue 已更改,实参 number 也不会被修改。这是因为 myValue 变量只包含了 number 变量的副本。只是这个副本被改变,而不是原来的。changeMe 函数无法访问原始实参。图 1 说明了形参变量在内存中的存储位置与原始实参的存储位置是分开的。
图 1 原始实参和函数形参在内存中是分开存储的
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算