1.     指针是指针变量的简称,也是变量,有变量就有地址
  2.     指针用于存放普通变量的地址
  3.     二级指针用来存放指针变量的地址
  4.     声明二级指针的语法:数据类型** 指针名
    例:
int _tmain(int argc, _TCHAR* argv[])
{
	//指针是指针变量的简称,也是变量,有变量就有地址
	//指针用于存放普通变量的地址
	//二级指针用来存放指针变量的地址
	//声明二级指针的语法:数据类型** 指针名
	//使用指针有两个目的(1)传地址(2)存放动态分配的内存地址
	//在函数中,如果传递普通变量的地址,形参用指针;传递指针的地址的地址,形参用二级指针
	//为什么要传地址?把普通变量的地址传入函数中后,可以在函数中修改变量的值;把指针的地址传入函数后,可以在函数中修改指针的值

	int ii = 8;			cout << "ii=" << ii << ",ii的地址是:" << &ii << endl;
	int* pii = ⅈ		cout << "pii=" << pii << ", pii的地址是:" << &pii<<",*pii="<<*pii << endl;
	//二级指针,就是指针的指针
	int* *ppii = &pii;	cout << "ppii=" << ppii << ", ppii的地址是:" << &ppii<<",*ppii=" <<*ppii<< endl;

	cout << "**ppii=" << **ppii << endl;//对ppii解两次引用

	system("pause");
	return 0;
}
  1.     使用指针有两个目的(1)传地址(2)存放动态分配的内存地址
  2.     在函数中,如果传递普通变量的地址,形参用指针;传递指针的地址的地址,形参用二级指针
  3.     为什么要传地址?把普通变量的地址传入函数中后,可以在函数中修改变量的值;把指针的地址传入函数后,可以在函数中修改指针的值
    应用案例,如果业务要求把分配内存的代码与声明指针的代码分开,代码如下
/如果业务要求把分配内存的代码与声明指针的代码分开
//此函数功能为分配内存,然后把内存的地址赋给p,相当于要在函数中修改指针p的值,需要把指针p的地址传给函数
void func(int** pp)//生声明一个二级指针用来存放指针的地址
{
	*pp = new int(3);//对pp解引用之后就是p,給指针p分配内存
	cout << "pp=" << pp << ",*pp=" << *pp << endl;
}

//调用
//如果业务要求把分配内存的代码与声明指针的代码分开,就需要把指针的地址传给另一个函数
	int* p1 = NULL;//声明一个指针(指针要初始化)
	func(&p1);//在函数中分配内存,把p1的地址传进去

总结:如果需要在函数中修改指针的地址,就需要传递指针得地址,就需要用到二级指针