- 指针是指针变量的简称,也是变量,有变量就有地址
- 指针用于存放普通变量的地址
- 二级指针用来存放指针变量的地址
- 声明二级指针的语法:数据类型** 指针名
例:
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)传地址(2)存放动态分配的内存地址
- 在函数中,如果传递普通变量的地址,形参用指针;传递指针的地址的地址,形参用二级指针
- 为什么要传地址?把普通变量的地址传入函数中后,可以在函数中修改变量的值;把指针的地址传入函数后,可以在函数中修改指针的值
应用案例,如果业务要求把分配内存的代码与声明指针的代码分开,代码如下
/如果业务要求把分配内存的代码与声明指针的代码分开
//此函数功能为分配内存,然后把内存的地址赋给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的地址传进去
总结:如果需要在函数中修改指针的地址,就需要传递指针得地址,就需要用到二级指针