C语言提高: 二级指针的输入输出
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 了。
以上是关于C语言提高: 二级指针的输入输出的主要内容,如果未能解决你的问题,请参考以下文章