本文的目的,是带大家了解参数传递到底传的是什么东东?如果读者很了解这块,请绕道。
参数传递主要有3种,值传递、指针传递、引用传递。
值传递:形参另开一片内存,把实参的值拷贝至这片内存。
指针传递:形参另开一片内存,把实参的值拷贝至这片内存。(哈哈,和值传递一样,只是这里实参的值是一个地址)
引用传递:形参不用另开内存,引用变量的地址就是实参的地址,即形参和实参是同一片内存。
实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。
形参指针变量不能改变实参指针变量的值(一个地址),但可以变量实参指针变量所指向的值(这个地址的值)。
存在一个整型变量i,初始值是5。
1. 通过函数调用传递给形参v。值传递效果如下图a:
2. 通过函数调用传递给形参ip。指针传递效果如下图b:
3.通过函数调用传递给形参ir。指针传递效果如下图c:
下面看代码运行
void show_value_address(int v) {
cout << "&v = " << &v << endl;
}
void show_pointer_address(int* ip) {
cout << "ip = " << ip << endl;
cout << "&ip = " << &ip << endl;
}
void show_reference_address(int& ir) {
cout << "&ir = " << &ir << endl;
}
void main() {
int i = 5;
cout << "&i = " << &i << endl;
show_value_address(i);
show_pointer_address(&i);
int* i_p = &i;
cout << "i_p = " << i_p << endl;
cout << "&i_p = " << &i_p << endl;
show_pointer_address(i_p);
show_reference_address(i);
}
输出结果:
&i = 0016FDE4
&v = 0016F866
ip = 0016FDE4
&ip = 0016FD04
i_p = 0016FDE4
&i_p = 0016FDD8
ip = 0016FDE4
&ip = 0016FD04
&ir = 0016FDE4