浅析指向指针的指针其作用

这篇文章主要是介绍 指向指针的指针 的一种用法

所以这里不谈指针或指向指针的指针他们的基础


直接上代码(用途:使用一个函数动态申请内存,并赋值。跳出调用函数后输出赋值内容

#include <stdio.h>
#include <stdlib.h>

typedef struct Data
{
	int    da;
} Data;

void fun(Data *p);

int main()
{
	Data    *d;
	fun(d);
	printf("%d", d->da);
	return    0;
}

void fun(Data *p)
{
	p = (Data*)malloc(sizeof(Data));
	p->da = 2;
}

我建议你直接运行看看结果,你会发现运行出错,在这里我建议你先思考再往下看

那么再看看下面的这段代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct Data
{
	int    da;
} Data;

void fun(Data **p);     //这里改动了

int main()
{
	Data    *d;
	fun(&d);     //这里改动了
	printf("%d", d->da);
	return    0;
}

void fun(Data **p)     //这里改动了
{
	(*p) = (Data*)malloc(sizeof(Data));     //这里改动了
	(*p)->da = 2;     //这里改动了
}

仔细看就不难发现改动后的代码使用了指向指针的指针

为什么直接使用指针会不行呢?

因为第一段代码里 void fun(Data *p) 中参数是按值传递调用函数自动定义一个临时变量存储了实参的拷贝,那么在fun中动态分配的内存,根本就不是在main函数中指针变量d 所指向的,main中指针变量d 从头到尾都是未定义的。

如何解决这个问题?

用指向指针的指针,把main中指针变量d 的地址传进去。这样在fun中分配的内存空间地址就存放在指针变量d 中


说到这里,指向指针的指针其中的一个作用就不言而喻了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值