【C语言】多级指针传参的讲解

指针是C语言的精华,也是很重要的章节。我在学习的时候遇到多级指针的时候也会犯迷糊,最后我稍微发现了一点方法。下面想分享给大家。这篇文章我们通过分析题目、完成多级指针的传参 来讲一下多级指针传参与多级指针解引用,很简单易懂的方法。

多级指针

先来看一段不完整的代码

void func() 
{
	
}
int main()
{
	int a = 3;
	int b = 4;
	int *pa = &a;
	int *pb = &b;
	int **ppa = &pa;
	int **ppb = &pb;
}

思考:
现在我们的要求使ppa指向pb,那么函数func()中应该怎样传参呢?
思路:让ppa指向pb,就是将pb的地址ppb赋值给ppa。
分析:原先的时候 ppa是指向pa的,现在我们要使它指向pb。改变ppa的指向就是改变ppa的值,要改变一个数的值,就应该传ppa的指针,所以func()函数的第一个参数必须传ppa的地址&ppa; 指向pb,所以第二个参数应该传pb的地址,要能取到pb的值,那么就是ppb。所以void func(int ***pppa, int **ppb)。
那么我们接下来看

void func(int ***pppa , int **pb) 
{
	*pppa = ppb;
}

这样写,对吗?能否将ppa指向pb ?
我们来验证一下,打印一下**ppa的值,如果ppa指向pb那么 **ppa就是就是*pb的值也 就是b的值4

void func(int ***pppa, int **ppb) 
{
	*pppa = ppb;
}
int main()
{
	int a = 3;
	int b = 4;
	int *pa = &a;
	int *pb = &b;
	int **ppa = &pa; 
	int **ppb = &pb;
	func(&ppa, ppb);
	printf("%d\n", **ppa);
	system("pause");
}

答案正确。结果就是4。 把ppb的地址给了ppa。
【C语言】多级指针传参的讲解_第1张图片
原因: ----- 在搞不懂问题的时候将图画出来,分析问题,更加清楚明白
【C语言】多级指针传参的讲解_第2张图片
那么我们那么我们要求将func函数改一下。

void func(int ***pppa, int **ppb) 
{
	**pppa = *ppb  
}

我们思考一下这样子写结果是多少??我们可以用上面输出**ppa验证一下结果是多少
【C语言】多级指针传参的讲解_第3张图片
结果是4,验证正确,可是满足题意ppa指向pb吗?我们画图来看一下。
【C语言】多级指针传参的讲解_第4张图片
这个做的是让pa指向了b。所以得把ppa的值打印出来,才可以判断。是否使ppa指向了pb。这样子验证不是很严谨。

总结方法

防多级指针解引用与使用错误严格按照几级指针几个p来定义指针,一个抵消一个p。所以pppa = *ppb 所以 ppa就指向了pb
举个栗子:
(**pp)pa = (*p)pb;//()里面是抵消的
那么就是pa = pb,pa指向了b。

这样子就更加简单的清楚地了解多级指针了呢 ^ _ ^

你可能感兴趣的:(C)