#include<iostream>
using namespace std;
//指针作为值传递时,无法修改或给其赋值
void PointerAssignment1(int*m, int&n) {
m = &n;
}
//可以利用以下方式操作
//地址传递,二级指针修改p的指向
void PointerAssignment2(int**m,int &n) {
*m = &n;
}
//通过指针的引用改变指向
void PointerAssignment3(int*&m,int&b) { //传入一级指针的引用(一级指针的地址)
//m =new int(15);
m = &b;
}
int main() {
int a = 10;
int b = 20;
int* p = NULL;
//PointerAssignment1(p, b);
//cout << "*p=" << *p << endl;//没有输出任何内容,原因指针作为值传递时,
// //无法改变指针的值(也就是指针的指向),只能改变指针指向的值,
// //因为p原本指向NULL,所以这里*p没有输出任何内容
//解决办法:改变指针的指向,再解引用输出指针指向的值
//想要改变指针的指向,就需要传入指针的地址,对其地址进行操作就能改变。用什么对其操作:二级指针
//PointerAssignment2(&p, b);
//cout << "*p=" << *p << endl;//输出20;
PointerAssignment3(p,b);
cout << "*p=" << *p << endl;//输出20;
//delete p;//指针维护堆内存时需要手动释放,如果维护局部变量则不用
system("pause");
return 0;
}