关于指针形参的注意事项:
不要企图通过改变指针形参的值而使指针实参的值改变,看下面的代码:
#include <iostream>
void swap(int * p1, int * p2);
int main() {
int a = 5, b = 9;
int * pa, * pb;
pa = &a;
pb = &b;
if(a < b) swap(pa, pb);
std::cout << a << ' ' << b <<std::endl;
return 0;
}
void swap(int * p1, int * p2) {
int * temp;
temp = p1;
p1 = p2;
p2 = temp;
}
输出仍然是: 5 9
要想输入 9 5 ,我们应该这样做:
#include <iostream>
void swap(int * p1, int * p2);
int main() {
int a = 5, b = 9;
int * pa, * pb;
pa = &a;
pb = &b;
if(a < b) swap(pa, pb);
std::cout << a << ' ' << b <<std::endl;
return 0;
}
void swap(int * p1, int * p2) {
int temp;
temp = * p1;
* p1 = * p2;
* p2 = temp;
}
因为在C / C++中实参变量和形参变量之间的数据传递是单向值传递的。即时使用指针变量做形参也要遵循这一规则。
不可能通过调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向的值。