博主最近刚学多级指针,在加上在函数中传递,给我整晕了,借此机会整理并总结一下二级指针在函数传递中的处理方式。
通过一个简单的输出函数来举例:
#include<stdio.h>
void print(int x)//输出函数
{
printf("%d\n",x);
}
int main()
{
int a = 3;
print(a);
return 0;
}
现在我们用指针实现它:
#include<stdio.h>
void print(int *px)//输出函数
{
printf("%d\n",*px);
}
int main()
{
int a = 3;
int *p = &a;
print(p);//这里p和&a等价
return 0;
}
最后使用二级指针实现:
#include<stdio.h>
void print(int **px)//输出函数
{
printf("%d\n",**px);
}
int main()
{
int a = 3;
int *p = &a;
int **pp = &p;
print(&p);//这里&p和pp等价
return 0;
}
以上三种写法输出均为3。
由此我们可以总结出 在涉及指针的传递中最重要的是 搞清楚各个地址,*p是什么,p是什么,&p又是什么。
可以参考下面的表格例子(地址瞎编的):
int i = 8;*pi = &i;**ppi = π
i = 8 &i = 0xaaa
pi = 0xaaa &pi = 0xbbb *pi = 8
ppi = 0xbbb &ppi = 0xccc *ppi = 0xaaa **ppi = 8