- 基础数据类型(以
int
为例):
- 表现:按值传递时,函数接收的是实参值的一个副本。对形参的任何修改都不会影响实参。
- 代码示例:
#include <iostream>
void modifyInt(int num) {
num = num + 1;
}
int main() {
int a = 5;
std::cout << "Before function call, a = " << a << std::endl;
modifyInt(a);
std::cout << "After function call, a = " << a << std::endl;
return 0;
}
- 内存变化:在
main
函数中,a
有自己的内存空间存储值5
。当调用modifyInt(a)
时,系统为形参num
分配新的内存空间,并将a
的值复制到num
的内存中。在modifyInt
函数中修改num
,只是修改了num
所在内存的值,而a
的内存值未改变。
- 自定义结构体类型:
- 表现:同样按值传递,函数接收结构体实参的一个副本。对形参结构体的修改不会影响实参结构体。
- 代码示例:
#include <iostream>
struct Point {
int x;
int y;
};
void modifyPoint(Point p) {
p.x = p.x + 1;
p.y = p.y + 1;
}
int main() {
Point myPoint = {1, 2};
std::cout << "Before function call, myPoint.x = " << myPoint.x << ", myPoint.y = " << myPoint.y << std::endl;
modifyPoint(myPoint);
std::cout << "After function call, myPoint.x = " << myPoint.x << ", myPoint.y = " << myPoint.y << std::endl;
return 0;
}
- 内存变化:在
main
函数中,myPoint
结构体有其对应的内存空间存储x
和y
的值。当调用modifyPoint(myPoint)
时,系统为形参p
分配新的内存空间,并将myPoint
结构体的内容逐字段复制到p
的内存中。在modifyPoint
函数中修改p
的x
和y
,只是修改了p
所在内存的值,而myPoint
的内存值未改变。