一维二维指针形参对比

Last updated on a year ago

探究C语言中**p,与*p做形参的不同

1
2
int a = 1;
int* p = &a;

[TOC]

以*p做形参:

以*p做形式参数时,可以通过

1
2
3
4
5
6
7
8
void f(int* p)
{
*p = 10;
}
-->
a = 1
*p = 1;

来改变指针的值;
但如果在函数中将p指向另一个变量/内存,函数结束后,p不会改变指向

1
2
3
4
5
6
7
8
9
10
11
12
int* f(int *p)
{
int a = 10;
*p = &a;
return p;
}
p2 = f(p)
-->
a = 1;
*p = 1;
*p2 = 10;

以**p做形参

以**p做参数时候,可以通过

1
2
3
4
5
6
7
8
f(int** p )
{
int b = 100;
*p = &b;
}
-->
a = 1;
*p = 100;

改变p的指向,将p指向另一个变量\地址。

总结

当只需要改变输入的指针所指变量的值,而不需要改变指针所指地址时,使用一维指针;当需要改变输入的指针所指地址的时,选择用二维指针。