本意想构造一个函数,交换两个指针的地址。
#include <iostream>
using namespace std;
void exchange(int *p1, int *p2) {
int *p3 =p2;
p2 = p1;
p1 = p3;
}
int main()
{
int a, b;
cout << "请输入两个整数:" << endl;
cin >> a >> b;
int *p1 = &a;
int *p2 = &b;
cout << p1 << "\n"<<p2 <<endl;
exchange(p1, p2);
cout << p1 << "\n" << p2 << endl;
return 0;
}
输入:1 2
输出:19F804
19F824
19F804
19F824
并没有改变。
但记得函数内运用指针可以改变指针的值。验证函数内改变指针的值可作用于外部主函数内以及函数内改变指针地址在该函数结束时就还原。
#include <iostream>
using namespace std;
void exchange(int *p1, int *p2) {//该函数不会改变指针的值也不会改变指针的地址
int *p3 =p2;//所以改变都是 在函数内部,执行完后均不会改变
p2 = p1;
p1 = p3;
*p1 = 100;
}
//来试试函数内部是否可以改变指针所指向的值
//答案是可以的,
int main()
{
int a, b;
cout << "请输入两个整数:" << endl;
cin >> a >> b;
int *p1 = &a;
int *p2 = &b;
cout << p1 << "\n"<<p2 << "\n"<<*p1<<"\n"<<*p2<<endl;
exchange(p1, p2);
cout << p1 << "\n" << p2 <<"\n"<<*p1<<"\n"<<*p2<< endl;
return 0;
}
输入: 1 2
输出:2DF974
2DF994
1
2
2DF974
2DF994
1
100
结论:函数内改变指针的值可作用于外部主函数内;函数内改变指针地址在该函数结束时就还原。
若想在函数内改变指针地址,应用指针的引用。
改变exchange(int *&p1,int *&p2)的参数类型即可。
C++primer习题 P134

486

被折叠的 条评论
为什么被折叠?



