c++二级指针
普通变量作为形参
在函数中采用普通变量接收实参传递的变量,对变量的操作是对实参拷贝值的操作,不会改变原有变量的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using namespace std;
void change_value(int a){
a = 10;
}
int main(){
int a = 10;
cout << "before changed,a=" << a << endl;//输出:before changed,a=10
change_value(a);
cout << "after changed,a=" << a << endl;//输出:after changed,a=10
return 0;
}指针变量作为形参
由上可知,普通变量作为形参时,对变量的操作其实是对拷贝值的操作,不会改变原来变量的值,若要改变原来变量的值,可采用指针变量作为形参。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using namespace std;
void change_value(int *p){
*p = 20;
}
int main(){
int a = 10;
cout << "before changed,a=" << a << endl;//输出:before changed,a=10
change_value(&a);
cout << "after changed,a=" << a << endl;//输出:after changed,a=20
return 0;
}二级指针作为形参
以上是通过函数修改普通变量的值,若要对指针变量的指向进行修改,则需要使用二级指针来实现。
首先在函数中,采用指针变量作为形参接收实参传递的指针,示例代码如下,由代码输出结果可知,用指针变量作为形参不能够修改原来指针的指向。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using namespace std;
void change_value(int *p){
p = new int(20);
}
int main(){
int a = 10;
int *p = &a;
cout << "before changed,*p=" << *p << endl;//before changed,*p=10
change_value(p);
cout << "after changed,*p=" << *p << endl;//after changed,*p=10
return 0;
}以下代码是二级指针作为形参的示例代码,由代码输出可知,二级指针作为形参时可以修改原来指针变量的指向。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using namespace std;
void change_value(int **p){
*p = new int(20);
}
int main(){
int a = 10;
int *p = &a;
int **pp = &p;
cout << "before changed,*p" << *p << endl;
change_value(pp);
cout << "before changed,*p" << *p << endl;
cout << "after changed,**pp" << **pp << endl;
return 0;
}
此外,二级指针还常与结构体、数组一起使用,二级指针搭配结构体/数组的使用将在后续补充 !