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

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

题目


现有三个字符串“aaaaa”,“bbbbb”,“ccccc”,要求实现一个函数(接口)把这三个字符串拼接成一个字符串。


代码


#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void SortArray(const char ** const myArray1, char ** myarray2)
{
  if (myArray1 == NULL)
  {
    printf("myArray1 err \n");
    return;
  }
  // 给新生成的字符串预先分配空间
  char *str = (char*)malloc(100);
  if (str==NULL)
  {
    printf("malloc err\n");
    return;
  }
  // 把三个独立的字符串都拷贝到一起
  strcpy(str, myArray1[0]);
  strcat(str, myArray1[1]);
  strcat(str, myArray1[2]);
  // 通过取*操作把新生成的字符串返回给 main 函数
  *myarray2 = str;
}
int main()
{
  char *myarray1 = NULL;
  const char *myArray[] = { "aaaaa", "bbbbb", "cccccc" };
  SortArray(myArray, &myarray1);
  printf("%s", myarray1);
  free(myarray1);
  return 0;
}



解析


1. 二级指针的输入输出


由题目解答我们可以看到调用者 main 函数中在栈区分配了内存通过二级指针 myArray1 输入给被调用者 SortArray 函数,这时我们称二级指针 myArray为输入参数。在被调用函数 SortArray 分配空间后并通过二级指针 myarray2输出给调用者 main 函数,这是我们称二级指针 myarray2 为输出参数。通过以上代码我们了解了二级指针的输入输出。


2. 内存模型图



由上图我们可以看到答案代码的内存模型图,首先在 main 函数中 myarray1 压栈这时他存放的是 NULL,然后 myArray 数组压栈他存放的是三个指针也就是三个地址,这三个地址对应的是三个字符串“aaaaa”,“bbbbb”,“ccccc”。


然后在SortArray 函数中参数 myArray1 压栈他存放的是数组 myArray 的地址 0xaa,接着 myarray2 压栈,他存放的地址是 myarray1 的地址 0xbb,最后 str 压栈他存放的是 malloc 出来的空间的地址 0x44,通过 *myarray2 = str(此时的myarray2地址是传进来的myarray1),使得 myarray1存放的地址为 0x44,这时 main 函数中的 myarray1 指针就指向了堆空间中的字符串 aaaaabbbbbccccc 了。


相关文章
|
1天前
|
安全 C语言
【C语言】如何规避野指针
【C语言】如何规避野指针
21 0
|
1天前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
1天前
|
存储 程序员 编译器
爱上C语言:指针很难?来来来,看看这篇(基础篇)
爱上C语言:指针很难?来来来,看看这篇(基础篇)
|
1天前
|
C语言
c语言指针总结
c语言指针总结
15 1
|
1天前
|
C语言 C++ 数据格式
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数
|
1天前
|
C语言
C语言(指针详解)重点笔记:指针易错点,都是精华
C语言(指针详解)重点笔记:指针易错点,都是精华
3 0
|
1天前
|
存储 C语言
C语言指针讲解(适用于初学者)
C语言指针讲解(适用于初学者)
6 0
|
1天前
|
存储 程序员 C语言
【C 言专栏】C 语言指针的深度解析
【4月更文挑战第30天】C 语言中的指针是程序设计的关键,它如同一把钥匙,提供直接内存操作的途径。指针是存储其他变量地址的变量,通过声明如`int *ptr`来使用。它们在动态内存分配、函数参数传递及数组操作中发挥重要作用。然而,误用指针可能导致错误,如空指针引用和内存泄漏。理解指针的运算、与数组和函数的关系,以及在结构体中的应用,是成为熟练 C 语言程序员的必经之路。虽然挑战重重,但掌握指针将增强编程效率和灵活性。不断实践和学习,我们将驾驭指针,探索更广阔的编程世界。
|
1天前
|
算法 搜索推荐 程序员
C语言中的函数指针和回调函数
C语言中的函数指针和回调函数
11 2
|
1天前
|
存储 编译器 C语言
【C语言】初步解决指针疑惑
【C语言】初步解决指针疑惑
7 0

热门文章

最新文章