分享

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

 流楚丶格念 2022-01-14

文章目录

题目

现有三个字符串“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 把堆空间地址传出,我们称这个三级指针参数为输出参数。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多