#指针和指针的引用作为参数–c++
指针都清楚,存放变量地址的变量。那么指针指向的数据是可以改变,而指针本身是不可以改变的。表示为: *P;
指针的引用, 相当于指针的指针。 作为参数传递时,这样指针的数值是可以改变的 ,表示为: &P
fun(int * pA); // pA的数值在函数返回后不会变化
fun(int& pA); // pA的数值在函数返回可能会发生变化,如果fun函数内部对pA赋值的话
指针作为参数传递
e.g
int m_value = 1;
void func(int *p)
{
p = &m_value;//语句1,只执行该语句,主函数*pn的值不变还是2
*p=1; //语句2,只执行该语句,主函数的值变为1
}
int main(int argc, char *argv[])
{
int n = 2;
int *pn = &n;
cout << *pn << endl;
func(pn);
cout << *pn <<endl;
return 0;
}
二级指针作为参数
void func(int **p)
{
*p = &m_value;//实际修改的main()的*pn
// 也可以根据你的需求分配内存
*p = new int;
**p = 5;
}
int main(int argc, char *argv[])
{
int n = 2;
int *pn = &n;
cout << *pn << endl;
func(&pn);
cout << *pn <<endl;
return 0;
}
结果2,5
int m_value = 1;
void func(int *&p)
{
p = &m_value;
// 也可以根据你的需求分配内存
p = new int;
*p = 5;
}
int main(int argc, char *argv[])
{
int n = 2;
int *pn = &n;
cout << *pn << endl;
func(pn);
cout << *pn <<endl;
return 0;
}
结果为: 2,5
void InitStack(LNode* & HS)
{
HS = NULL; // 函数返回后, HS就是NULL了
}
void InitStack(LNode* HS)
{
HS = NULL; // 函数返回后, HS依然是传递进来的数值
}
*& 指针本身可变;
-
指针本身不变,仅指向的内容可变。