C语言提高:三级指针的输出(不会)

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言提高:三级指针的输出(不会)相关的知识,希望对你有一定的参考价值。

文章目录

题目

现有三个字符串“lalalalala”,“yang”,“helloworld”,要求实现一
个函数(接口)把这三个字符串存放到堆区。

要求:使用三级指针作为指针输出这个堆空间的地址。

代码

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

int getArray(char ** myarray1, char ***newp, int num)
{
	int i = 0;
	char **tmp = NULL;

	// 开辟堆空间存放一级指针,因为存放的是一级指针,所以用二级指针接收
	tmp = (char **)malloc(num*sizeof(char *));

	// 分别再给每个指针分配空间,用来存放字符串
	for ( i = 0; i < num; i++)
	{
		tmp[i] = (char*)malloc(sizeof(char) * 100);
	}

	// 向空间中拷贝字符串
	for (i = 0; i < num; i++)
	{
		strcpy(tmp[i], myarray1[i]);
	}
	// 把指针数组的空间地址返回回去
	*newp = tmp;
	return 0;
}

void freeArray(char ***newpfree, int num)
{
	char **p = NULL;

	int i = 0;
	int ret = 0;
	p = *newpfree;
	// 释放每一个存放字符串的空间
	for (i = 0; i < num; i++)
	{
		free(p[i]);
	}
	// 释放存放一级指针的空间
	free(p);
	// 把指针指向 NULL
	*newpfree = NULL;
}

int main()
{
	int i = 0;
	int num = 3;			// 总共有三个字符串
	char **myArray3 = NULL;	// 用于接收空间地址
	char *myArray1[] = { "lalalalala", "yang","helloworld" };
	getArray(myArray1, &myArray3, num);
	for (i = 0; i < num; i++)
	{
		printf("%s\\n", myArray3[i]);
	}
	// 把空间都释放
	freeArray(&myArray3, num);

	return 0;
}

在这里插入图片描述

解析

通过题目解析我们可以看到,被调用函数 getArray 申请了堆空间并且通过三级指针 newp 把堆空间地址传出,我们称这个三级指针参数为输出参数。

以上是关于C语言提高:三级指针的输出(不会)的主要内容,如果未能解决你的问题,请参考以下文章

C语言提高: 二级指针的输入输出

C语言提高: 二级指针的输入输出

C语言提高:一级指针的输入输出

C语言提高:一级指针的输入输出

C 语言多级指针 ( 在函数中生成 二级指针 | 通过传入的 三级指针 进行间接赋值 )

C语言提高内容目录