C语言指针传参问题
#include <stdio.h>
void fun(int a, int *bp, int **pa, int ***pb)
{
static int sum;
static int y = 10;
sum = a + *bp;
*pa = &y;
*pb = pa;//这个是啥意思啊。。。。? pa地址给*pb? 为什么写成pb=&pa就报错?
***pb = 300;
return;
}
int main(void)
{
int a = 100;
int b = 200;
int *p1 = NULL;
int **p2 = NULL;
fun(a, &b, &p1, &p2);
printf("*p1 = %d, **p2 = %d\n", *p1, **p2);
return 0;
}
代码如上,请各位大哥们详细解释下这个程序的传参问题。实参传入和形参完全不一样啊。。。那么在子函数中如何运行啊。。。。请各位大神们解答解答。。。。跪求 pb=&pa报错因为类型不一致,*pb(解引用相当于二级指针) , pa本来是二级指针加上&pa变成了三级指针。
void fun(int a, int *bp, int **pa, int ***pb)里面的各个参数都开辟了新的内存,只是他们的内容
分别是。int a实参的拷贝,后面几个都是形参的内容都是实参的地址。
sum = a + *bp; //*bp解引用=200.
*pa = &y; //(*pa解引用相当于是一个地址,然后把y的地址赋给pa)
*pb = pa;//(两个都是二级地址,可以赋值)
***pb = 300; //(三级指针,解引用***,就可以直接赋值)