二级指针:在主函数中申明变量,在子函数中分配内存,有两种方式返回二级指针。在这个过程只有深刻理解了C的函数调用模型,以及指针的内存模型,才能够掌握好。

#pragma once
#include <iostream>
#include <string>using namespace std;//二级指针通过返回值的方式返回
char ** sortArray1Array2(char **array1, int count1, char(*array2)[30], int count2, int * totalNum)
{*totalNum = count1 + count2;char **p = (char**)malloc((*totalNum) * sizeof(char*));if (p == NULL){throw exception("申请内存出现错误");}for (int i = 0; i < *totalNum; i++){p[i] = (char*)malloc(30 * sizeof(char));if (p[i] == NULL){throw exception("申请内存错误");}}for (int i = 0; i < count1; i++){strcpy_s(p[i], 30, array1[i]);}for (int i = 0; i < count2; i++){strcpy_s(p[count1 + i], 30, array2[i]);}char *tmp = NULL;for (int i = 0; i < *totalNum; i++){for (int j = i + 1; j < *totalNum; j++){if (strcmp(p[i], p[j]) > 0){tmp = p[i];p[i] = p[j];p[j] = tmp;}}}return p;
}//二级指针通过函数参数3级指针的方式返回;传入的时候需要传入的是变量的地址
int sortArray1Array2(char **array1, int count1, char(*array2)[30], int count2, char ***array3)
{int totalNum = count1 + count2;char **p = (char**)malloc((totalNum) * sizeof(char*));*array3 = p;if (p == NULL){throw exception("申请内存出现错误");}for (int i = 0; i < totalNum; i++){p[i] = (char*)malloc(30 * sizeof(char));if (p[i] == NULL){throw exception("申请内存错误");}}for (int i = 0; i < count1; i++){strcpy_s(p[i], 30, array1[i]);}for (int i = 0; i < count2; i++){strcpy_s(p[count1 + i], 30, array2[i]);}char *tmp = NULL;for (int i = 0; i < totalNum; i++){for (int j = i + 1; j < totalNum; j++){if (strcmp(p[i], p[j]) > 0){tmp = p[i];p[i] = p[j];p[j] = tmp;}}}return totalNum;
}void freePtr(char ** array1, int arrayNum)
{for (int i = 0; i < arrayNum; i++){free(array1[i]);}free(array1);
}void test()
{int i = 0;char ** pArray3 = NULL;int nArray3Num = 0;//指针数组char * array1[] = { "bbbbbb", "aaaa", "cccccc", "2222", "1111111111", "444444" };//二维数组char array2[10][30] = { "zzzzzz", "yyyyyy", "3333333333" };pArray3 = sortArray1Array2(array1, 6, array2, 3, &nArray3Num);nArray3Num = sortArray1Array2(array1, 6, array2, 3, &pArray3);for (int i = 0; i < nArray3Num; i++){cout << pArray3[i] << endl;}if (pArray3 != NULL){freePtr(pArray3, nArray3Num);pArray3 = NULL;}
}

二级指针在子函数中申请内存的两种方式相关推荐

  1. 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)

    如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...

  2. brk16_Linux进程分配内存的两种方式--brk() 和mmap()

    如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...

  3. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  4. 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 姓名:李冬辉 学号:20133201 注: 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http ...

  5. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  6. sh执行文件 参数传递_详解shell中脚本参数传递的两种方式

    方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${ ...

  7. c语言向文件中写入字符串_C语言中定义字符串的两种方式及其比较

    先看如下代码: 以上用两种方式定义一个字符串: 1.定义一个char * 类型指针,指向字符串首字符首地址. 2.定义一个数组,数组里存放元素为字符串各个字符+'0',其中'0'为码0值,编译器会自动 ...

  8. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  9. java多线程区别_Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

最新文章

  1. java编程思想第四版第三章要点习题
  2. Mysql可重复读实现原理分析
  3. 如何通过Fiori后台调试的方式找到gateway系统的ID
  4. Java数组在内存中的分配
  5. 如何检测过时的Kubernetes API
  6. mysql拼接数组_Mysql合并结果接横向拼接字段的实现步骤
  7. 白话SCRUM 之四:燃尽图
  8. MongoDB 生态 – 可视化管理工具
  9. matlab输出语句fprintf格式,matlab输出语句fprintf
  10. java中长整形怎么定义_java中长整型定义
  11. 廊坊圣洁口去医院明星同款·隐形矫正试戴会圆满举办!
  12. 医疗器械软件 软件生存周期过程
  13. 短期学习目标2022/3/16
  14. 使用python爬取中国电影票房数据并写入csv文件
  15. html组织架构插件,jQuery组织架构图插件okrTree.js
  16. 快速开发EasyUI Datagrid报表 thinkphp框架 ppt和视频教程
  17. VS在windows10输入中文显示问号的问题
  18. 《大家的日语1》语法整理1~48课
  19. 快手登录不了怎么办显示服务器繁忙,你的快手账号异常请重新登录是怎么回事...
  20. CSDN总裁蒋涛:从软件技术高手到百万富翁的三条捷径

热门文章

  1. 浪漫结婚典礼PPT模板
  2. 刷题记录(NC236173 宝藏猎人)
  3. 兄弟连沈超linux教程视频,x_13_Linux系统管理-兄弟连-李明-沈超视频教程笔记
  4. 十大高蛋白质食品 补充蛋白质的最佳选择
  5. xfplay(先锋影音) v8.9.8 官方版
  6. [OpenSceneGraph入门指导]1.6 OpenSceneGraph 概览
  7. 启动计算机页面配置问题,win10系统提示由于启动计算机时出现了页面配置问题的操作步骤...
  8. java 8位随机数字_java随即产生8位数的密码
  9. Three.js--》实现3D汽车展厅效果展示
  10. 【unity基础】点乘和叉乘