//二级指针内存模型混合实战
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //将内存模型①和内存模型②的数据拷贝到内存模型③
char ** threemodel(char **pin1,int num1,char (*pin2)[],int num2,char **pin3,int *pnum3){
if (pin1==NULL)
{
printf("pin1==NULL\n");
}
if (pin2 == NULL)
{
printf("pin2==NULL\n");
}
if (num1 == )
{
printf("num1 == 0\n");
}
if (num2 == )
{
printf("num2 == 0\n");
}
int num3 = num1 + num2;
int i = , j = ,index=;
//分配二级指针内存堆空间
pin3 = (char **)malloc(sizeof(char *)*num3);
if (pin3==NULL)
{
printf("分配二级内存失败!");
return NULL;
}
for (i = ; i < num1; i++)
{
//获取本段字符串的长度
int temp1 = (int)strlen(pin1[i]) + ;//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 = ; j < num2; j++)
{
int temp1 = (int)strlen(*(pin2 + j)) + ;
//*(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[] = {"","",""};
//第二种内存模型
char tarr[][] = {"aaa","bbb","ccc"};
//第三种内存模型
char **pdata = NULL;
int num = ,i=;
pdata = threemodel(pstr, , tarr, , pdata, &num);
if (pdata!=NULL)
{
for (i = ; 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语言 二级指针内存模型混合实战的更多相关文章

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

    //二级指针内存模型③ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #incl ...

  2. C语言 二级指针内存模型①

    //二级指针第一种内存模型 #include<stdio.h> #include<stdlib.h> //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素 ...

  3. C语言 二级指针内存模型②

    //二级指针第二种内存模型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #incl ...

  4. c语言二级指针内存模型

    第一种: 指针数组作为输入参数 char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", " ...

  5. 深入理解C语言-二级指针三种内存模型

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

  6. 真正明白C语言二级指针(转载)

    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...

  7. 真正明白c语言二级指针

    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...

  8. C语言二级指针底层实现

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

  9. C语言二级指针(指向指针的指针)

    转载:http://c.biancheng.net/cpp/html/85.html 指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 in ...

随机推荐

  1. Android项目实战(九):CustomShapeImageView 自定义形状的ImageView

    一个两年前出来的第三方类库,具有不限于圆形ImageView的多种形状ImageView,项目开发必备 github下载地址:https://github.com/MostafaGazar/Custo ...

  2. C++标准库string类型

    string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作.标准库string类型的目的就是满足对字符串的一般应用. 本文地址:http://www.cn ...

  3. IOS xib在tableview上的简单应用(通过xib自定义cell)

    UITableView是一种常用的UI控件,在实际开发中,由于原生api的局限,自定义UITableViewCell十分重要,自定义cell可以通过代码,也可以通过xib. 这篇随笔介绍的是通过xib ...

  4. Android开发者的Git&GitHub(二)

     将代码托管到GitHub上 点击右上角New repository按钮来创建一个版本库 命名后选择添加一个Android项目类型的.gitignore文件,并选择开源协议(例如:Apache v2 ...

  5. C语言-02-基本运算

    一.算术运算 种类 1> 加(+),同时可以表示正号 2> 减(-),同时可以表示负号 3> 乘(*) 4>除(/) 5>取余(%) 关于类型转换 1>自动类型转换 ...

  6. iOS支付宝集成时遇到的问题整理(2)

    1.集成支付宝SDK编译报错#include<openssl/asn1.h>这一行  “openssl/asn1.h”file not found 解决方法:在BuildSetting 里 ...

  7. LeetCode 5 Longest Palindromic Substring(最长子序列)

    题目来源:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest ...

  8. paas架构之docker——安装

    1. 概要 本文描述docker的安装 参考官方文档:https://docs.docker.com/engine/installation/linux/ubuntulinux/ 安装操作系统: Ub ...

  9. 《HTML5与CSS3实例教程》

    <HTML5与CSS3实例教程> 基本信息 作者: (美)Brian P. Hogan 译者: 卢俊祥 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:97871153634 ...

  10. HttpClient使用方法(包括POST文件)

    最近在做跨系统的数据交互业务,从.Net的系统提交数据到Java的系统. 简单的表单Get.POST都没问题,但是有个功能是要提交普通文本和文件,试了好多都有问题,最后用HttpClient小折腾了一 ...