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

简介: 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 把堆空间地址传出,我们称这个三级指针参数为输出参数。

相关文章
|
14天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
20 0
|
14天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
26 0
|
21天前
|
存储 程序员 C语言
C语言指针的概念、语法和实现
在C语言中,指针是其最重要的概念之一。 本文将介绍C语言指针的概念、语法和实现,以及如何使用它们来编写高效的代码。
13 0
|
21天前
|
存储 C语言
【C语言】深入解开指针(三)2
【C语言】深入解开指针(三)
|
21天前
|
存储 程序员 C语言
【C语言】深入解开指针(二)2
【C语言】深入解开指针(二)
【C语言】深入解开指针(二)2
|
21天前
|
存储 C语言
【C语言】深入解开指针(一)1
【C语言】深入解开指针(一)
|
1月前
|
存储 C语言
C语言:使用指针遍历数组
C语言:使用指针遍历数组
|
29天前
|
存储 人工智能 编译器
C语言指针详解
指针运算,指针和数组,二级指针
C语言指针详解
|
29天前
|
存储 C语言
C语言第二十四弹---指针(八)
C语言第二十四弹---指针(八)
|
29天前
|
编译器 C语言
C语言第十九弹---指针(三)
C语言第十九弹---指针(三)