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语言提高:三级指针的输出(不会)的主要内容,如果未能解决你的问题,请参考以下文章