http://www.cnblogs.com/zhanggaofeng/p/5485833.html

//二级指针内存模型混合实战
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//将内存模型①和内存模型②的数据拷贝到内存模型③
char ** threemodel(char **pin1,int num1,char (*pin2)[20],int num2,char **pin3,int *pnum3){if (pin1==NULL){printf("pin1==NULL\n");}if (pin2 == NULL){printf("pin2==NULL\n");}if (num1 == 0){printf("num1 == 0\n");}if (num2 == 0){printf("num2 == 0\n");}int num3 = num1 + num2;int i = 0, j = 0,index=0;//分配二级指针内存堆空间pin3 = (char **)malloc(sizeof(char *)*num3);if (pin3==NULL){printf("分配二级内存失败!");return NULL;}for (i = 0; i < num1; i++){//获取本段字符串的长度int temp1 = (int)strlen(pin1[i]) + 1;//strlen()函数获取的是字符串(不包括'\0')的长度,因此长度需要+1//分配一级指针内存堆空间pin3[index] = (char *)malloc(sizeof(char)* temp1);if (pin3[index] == NULL){printf("分配一级内存失败!");return NULL;}//开始拷贝数据
        strcpy(pin3[index], pin1[i]);index++;}for (j = 0; j < num2; j++){int temp1 = (int)strlen(*(pin2 + j)) + 1;//*(pin2 + j)==pin2[j],但是*(pin2 + j)便于理解//分配一级指针内存堆空间pin3[index] = (char *)malloc(sizeof(char)* temp1);if (pin3[index] == NULL){printf("分配一级内存失败!");return NULL;}//开始拷贝数据strcpy(pin3[index], *(pin2 + j));index++;}*pnum3 = num3;return pin3;
}void main()
{//第一种内存模型char *pstr[3] = {"111","222","333"};//第二种内存模型char tarr[3][20] = {"aaa","bbb","ccc"};//第三种内存模型char **pdata = NULL;int num = 0,i=0;pdata = threemodel(pstr, 3, tarr, 3, pdata, &num);if (pdata!=NULL){for (i = 0; i < num; i++){if (pdata[i]!=NULL){printf("%s\n", pdata[i]);//释放当前内存free(pdata[i]);//消除野指针pdata[i] = NULL;}}//释放pdata所指向的内存空间free(pdata);pdata = NULL;}system("pause");
}

分类: C语言

C语言 二级指针内存模型混合实战相关推荐

  1. C语言二级指针内存模型建立

    C语言二级指针内存模型建立 代码 解析 代码 void main() {int i = 0;//指针数组char * p1[] = {"123", "456"

  2. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  3. C语言 二级指针内存分配、初始化和释放

    二级指针的内存分配 使用malloc函数 使用calloc函数 C语言有两种内存分配函数,一个为malloc函数,一个为calloc函数.两者在使用上具有差不多的功能. 使用malloc函数 mall ...

  4. c语言二级指针内存释放,详解C语言-二级指针三种内存模型

    二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...

  5. 【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

    文章目录 前言 一.指针数组 二.二维数组 三.自定义二维指针内存 前言 绘制如下 333 种二级指针的内存模型 : // I. 指针数组 char *p1 []= {"12", ...

  6. c语言二级指针实现队列,C语言二级指针底层实现

    C语言中,Pointers to Pointers,即二级指针. 一级指针和二级指针的值都是指向一个内存单元: 一级指针指向的内存单元存放的是源变量的值, 二级指针指向的内存单元存放的是一级指针的地址 ...

  7. C语言字符串相关一级指针内存模型

    C语言字符串相关一级指针内存模型 通过实例探索一级指针内存模型 通过实例探索一级指针内存模型 void main() {char buf[20]= "aaaa";char buf2 ...

  8. 【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一.字符串 一级指针 内存模型 1.指定大小字符数组 2.未指定大小字符数组 3.指向常量字符串的指针 4.指向堆内存的指针 一.字符串 一级指针 内存模型 #include <std ...

  9. 关于C语言二级指针正确使用总结

    关于C语言二级指针正确使用总结 什么是二级指针 C语言中的二级指针其实就是指向指针的指针,指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.同理可以构建三级或者N级指针,但是一般情况下用不到 ...

最新文章

  1. mac系统添加VSCode到右键菜单(转)
  2. 【SPOJ-QTREE】树链剖分
  3. c++11 你需要知道这些就够了
  4. 【JAVA】StringTokenizer 迭代方式对字符串进行分割
  5. 金融行业 | 电子银行系统性能优化解决方案
  6. 火柴棒等式(洛谷P1149题题解,Java语言描述)
  7. vCard主题个人简历主题
  8. WordPress 不用插件实现对长文章进行分页
  9. 【C++ STL学习之五】容器set和multiset
  10. Vue的基本环境搭建
  11. 迅雷有linux版本吗,迅雷 - Linux Wiki
  12. 量化交易——双均线策略(金叉死叉)
  13. Win7 Hiberfil.sys pagefile.sys
  14. 3dsmax2018可编辑多边形常用操作及部分快捷键
  15. JavaScript字符串(Date和Math对象)的相关操作及实例
  16. 英语翻译作业(十七)
  17. 「医疗行业」DevExpress助力上海一院HIS系统稳定升级
  18. 二分查找法的递归和非递归实现(C++)
  19. 鼎信诺服务器取数不显示账套,鼎信诺审计前端取数.doc
  20. 超难的智力题:12小球问题

热门文章

  1. 大话设计模式读书笔记--6.原型模式
  2. 面向对象 封装 集成 特性
  3. vijos P1740 聪明的质检员
  4. [奇葩 bug]视图在 ipad5 上正常显示,在 iPad3上超出了边界
  5. datetime2 数据类型
  6. linux运维选择题,初学Linux练习题
  7. 解释java程序中的异常机制_Java编程中的异常机制
  8. mysql 5.6.23免安装_mysql5.6.23免安装配置
  9. oracle 快照用途,Oracle快照原理及实现总结
  10. 如何用c 控制mysql数据库_用C语言操作MySQL数据库