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

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

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

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


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

#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 中


说到这里,指向指针的指针其中的一个作用就不言而喻了