【C语言】二级指针的实例

二级指针常用的场景有两种。
1、通过二级指针在函数内部进行内存分配。
2、通过二级指针使用函数改变指针的指向。
以下通过两个简单的实例,对此进行演示。

#include "stdio.h"
#include "stdlib.h"

/* 示例1:通过二级指针在函数内部进行内存分配 */ 
void malloc_fun(int **p2)
{
	*p2 = malloc(1);
}

void malloc_p1_test(void)
{
	int *p1 = NULL;
	
	printf("示例1:通过二级指针在函数内部进行内存分配\r\n");
	
	malloc_fun(&p1);	

	if( p1 == NULL )
	{
		printf("分配失败\r\n"); 
	}
	else
	{
		printf("分配成功,p1 = %#x\r\n", p1);
	}	 
} 

/* 示例2:通过二级指针使用函数改变指针的指向 */
int a = 100;
int b = 50;
int *p1 = &a;

void change_p1(int **p2)/* 使用二级指针 */
{
	*p2 = &b;
}

/* 错误的使用方式,使用一级指针,因为本来p1就是一级指针,_p1还是一级指针,只能进行值传递,_p1是p1的拷贝,而不是地址传递
   这就好像是int a传递给int _a,却想要在函数内改变a的值,这是不行的。 
 */
void change_p1_err(int *_p1)
{
	_p1 = &b;
} 

void chang_p1_test(void)
{
	printf("示例2:通过二级指针使用函数改变指针的指向\r\n");
	
	printf("错误的示例:\r\n");
	printf("改变指向之前");
	printf("*p1 = %d\r\n", *p1);
	change_p1_err(p1);
	printf("改变指向之后");
	printf("*p1 = %d\r\n", *p1);
	
	printf("正确的示例:\r\n");
	printf("改变指向之前");
	printf("*p1 = %d\r\n", *p1);
	change_p1(&p1);
	printf("改变指向之后");
	printf("*p1 = %d\r\n", *p1);	
}

int main(void)
{
	malloc_p1_test();
	
	chang_p1_test();
	
	return 0;
}

总结:
通过一级指针在作为实参传入函数时,如果需要在函数内部改变一级指针的指向,函数的形参就需要使用二级指针,如果函数形参使用的是一级指针,就是值传递,值传递在函数里面改变的是形参的值,而不是实参的指向。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值