C语言 二级指针内存模型混合实战
//二级指针内存模型混合实战
#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语言 二级指针内存模型混合实战的更多相关文章
- C语言 二级指针内存模型③
//二级指针内存模型③ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #incl ...
- C语言 二级指针内存模型①
//二级指针第一种内存模型 #include<stdio.h> #include<stdlib.h> //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素 ...
- C语言 二级指针内存模型②
//二级指针第二种内存模型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #incl ...
- c语言二级指针内存模型
第一种: 指针数组作为输入参数 char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", " ...
- 深入理解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...
- 真正明白C语言二级指针(转载)
指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...
- 真正明白c语言二级指针
指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...
- C语言二级指针底层实现
C语言中,Pointers to Pointers,即二级指针. 一级指针和二级指针的值都是指向一个内存单元: 一级指针指向的内存单元存放的是源变量的值, 二级指针指向的内存单元存放的是一级指针的地址 ...
- C语言二级指针(指向指针的指针)
转载:http://c.biancheng.net/cpp/html/85.html 指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 in ...
随机推荐
- Android学习一(入门)
一.Android 系统简介 1.1.1G-4G 1G:模拟制式手机,1995年问世的第一代模拟制式手机,只能进行语音通话, 2G:手机使用GSM,CDMA(9K/s),增加了接收数据的功能 2.5G ...
- UnityShader之Shader分类篇【Shader资料2】
关于ShaderLab,从我个人的理解上来看应该是分为三种类型. 1.Fixed function shader 固定渲染管线Shader,基于用于高级Shader在老显卡无法显示时的Fallback ...
- Google HTML/CSS代码风格指南(中文版)
原文链接:http://wncbl.cn/posts/c8e10815/ 看一下没什么印象,那就写一遍吧. 背景 本文档定义了HTML/CSS的编写格式和风格规则.它旨在提高合作和代码质量,并使其支持 ...
- Effective Java 23 Don't use raw types in new code
Generic types advantage Parameterized type can provide erroneous check in compile time. // Parameter ...
- 使用cxf构建webservice
一.简介 cxf是apache下的一个开源的,功能齐全的WebService框架.是由Celtix和XFire两个开源框架组合而成.cxf可以帮助我们使用前端编程模型构建和开发服务,如JAX- WS和 ...
- npm 配置全局文件
nodejs.npm 按照默认安装完成即可. 1.设置一下全局目录:配置npm的全局模块的存放路径以及cache的路径,将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"n ...
- 工作中常用的Linux命令:目录
工作两三年,每天都和Linux打交道,但每每使用Linux命令的时候却会像提笔忘字般不知如何使用,常常查手册或到网上找资料.此系列文章主要是为了方便自己在使用命令时随时可查阅.鄙人才疏学浅,文中若有任 ...
- 动态规划--模板--hdu 1059 Dividing
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- redis的info
redis的info http://redis.readthedocs.org/en/latest/server/info.html INFO INFO [section] 以一种 ...
- STL的erase()陷阱-迭代器失效总结
下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...