文章目录

  • 一、二级指针
    • 1、为 二维指针 分配内存
    • 2、为每个 一维指针 分配内存
    • 3、释放 二维指针 内存
  • 二、完整代码示例

一、二级指针


声明二级指针 :

    // 声明二维指针char **p = NULL;

1、为 二维指针 分配内存

在堆内存中 , 为 二维指针 分配一块内存空间 , 用于存储 num 个 一维指针 , 每个 一维指针 指向一块内存空间 ;

    // 在堆内存中 , 分配一块内存空间// 用于存储 num 个 一维指针// 每个 一维指针 指向一块内存空间p = (char **)malloc( sizeof(char*) * num );

2、为每个 一维指针 分配内存

通过遍历 , 使用 malloc 函数 在堆内存中 分配 20 字节内存 , 得到一个 一维指针变量 ;

将该 一维指针变量 分别 赋值 二维指针 指向的多个 一维指针变量 ;

通过遍历 , 向 每个 一维指针 变量 指向的内存空间中 ,

    // 遍历 二维指针 指向的多个 一维指针// 并为每个 一维指针 在堆内存中 分配 20 字节内存for(i = 0; i < num; i++){// 为每个字符分配 20 字节空间p[i] = (char *)malloc(sizeof (char) * 20);// 向内存中写入 字符串 , 字符串内容是 i + 1// 注意是通过通配符拼装的字符串sprintf(p[i], "%d", i + 1);}

3、释放 二维指针 内存

先释放 二维指针 指向的 一维指针 的内存 , 这些 一维指针 指向其分配的 202020 字节内存空间 , 存放了一个字符串信息 ;

    // 释放内存// 先释放 num 个 一级指针for(i = 0; i < num; i++){if(p[i] != NULL){free(p[i]);p[i] = NULL;}}

然后再释放 , 二级指针 指向的 内存 , 这些内存中存储这 一级指针 数据 ;

    // 再释放 二级指针if(p != NULL){free(p);}

二、完整代码示例


完整代码示例 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{// 二维指针 指向的 一维指针 个数int num = 4;// 声明二维指针char **p = NULL;// 循环控制变量int i = 0;// 在堆内存中 , 分配一块内存空间// 用于存储 num 个 一维指针// 每个 一维指针 指向一块内存空间p = (char **)malloc( sizeof(char*) * num );// 遍历 二维指针 指向的多个 一维指针// 并为每个 一维指针 在堆内存中 分配 20 字节内存for(i = 0; i < num; i++){// 为每个字符分配 20 字节空间p[i] = (char *)malloc(sizeof (char) * 20);// 向内存中写入 字符串 , 字符串内容是 i + 1// 注意是通过通配符拼装的字符串sprintf(p[i], "%d", i + 1);}// 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串for(i = 0; i < num; i++){printf("%s\n", p[i]);}// 释放内存// 先释放 num 个 一级指针for(i = 0; i < num; i++){if(p[i] != NULL){free(p[i]);p[i] = NULL;}}// 再释放 二级指针if(p != NULL){free(p);}// 命令行不要退出system("pause");return 0;
}

执行结果 :

【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )相关推荐

  1. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )

    文章目录 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 二.完整代码示例 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 在上一篇博客 [C 语言]二 ...

  2. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )

    文章目录 一.二维指针 排序 ( 通过 交换指针方式 进行排序 ) 二.完整代码示例 一.二维指针 排序 ( 通过 交换指针方式 进行排序 ) 在上一篇博客 [C 语言]二级指针作为输入 ( 二维指针 ...

  3. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )

    文章目录 一.二级指针排序 ( 抽象业务逻辑函数 ) 1.生成 二级指针 函数 2.打印 二维指针 函数 3.二维指针排序 函数 4.释放 二维指针 函数 二.完整代码示例 一.二级指针排序 ( 抽象 ...

  4. c++二维数组、二维指针、数组指针、指针数组

    一.二维数组 1.定义: //方法一 int arr1[2][3]; //方法二 int arr2[2][3] = { {1,2,3},{4,5,6} }; //方法三 int arr3[2][3] ...

  5. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

    文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...

  6. C语言什么时候必须用到二级指针?(需要调用函数为一维空指针确定值的情况下,需要传入二维指针,也就是那个一维指针的指针)

    结论:需要调用函数为一维空指针确定值的情况下,需要传入二维指针,也就是那个一维指针的指针 例子:为空指针p开辟内存空间 1.不用二级指针(无法实现) #include <stdio.h> ...

  7. C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策

    一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...

  8. 【C语言进阶深度学习记录】三十 二维数组与二维指针

    文章目录 1 二维指针(指向指针的指针) 2 二维数组 3 二维数组的类型 3.2 如何动态申请二维数组 4 总结 1 二维指针(指向指针的指针) 指针的本质是变量 指针的指针是保存指针变量的地址.如 ...

  9. 二维离散变换由c语言编写,C++实现离散余弦变换(参数为二维指针)(示例代码)...

    http://www.cnblogs.com/scut-linmaojiang/p/5013590.html 写在前面 到目前为止已经阅读了相当一部分的网格水印等方面的论文了,但是论文的实现进度还没有 ...

最新文章

  1. Linux搭建BT下载服务器,linux下搭建bt服务器–xbt篇
  2. 文献记录(part94)--Clustering and outlier detection using isoperimetric number of trees
  3. python公开发行版本_Python2 最后一个版本发布,正式迈入 Python3 时代
  4. 如何通过使用 64 位版本 Windows 查看系统注册表 WOW6432Node
  5. xlsx文件和csv文件的相互转化
  6. C#中Delegate和Event以及它们的区别
  7. 结对编程-四则运算生成
  8. 牛逼了,竟然真的有程序员做出了一套完整的地府后台管理系统,还开源了
  9. 记录一次es商品门店查询,关键字SearchSourceBuilder
  10. 根据后台日志文件查找错误_linux中find命令根据文件类型来查找
  11. 开心斗服务器维修要多久,大危机 《开心OL》史上最惨服务器开启?
  12. windchill安装搭建(保姆式)
  13. Spring Cloud原理分析系列#Gateway#GlobalFilter vs GatewayFilter vs WebFilter
  14. XMU 1613 刘备闯三国之三顾茅庐(一) 【并查集】
  15. 一只喵的西行记-10 哲学家H+计划
  16. java实现CORBA
  17. 汉诺塔问题——递归算法
  18. item_search - 根据关键词取虾皮(Shopee)商品列表
  19. 计算机四级维修工查询,计算机安装调试维修员(四级)技能鉴定试题单总汇.doc
  20. 全面 一文理解微服务高可用的常用手段

热门文章

  1. 数据库 'MessageManage' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。...
  2. Linux下使用mail命令发送邮件
  3. 上海电信计划2015年用户带宽提高12.5倍
  4. 心得体悟帖---开解语录2
  5. 黑马lavarel教程---4、csrf验证及相关
  6. 解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题...
  7. table表格固定前几列,其余的滚动
  8. 洛谷 P3112 [USACO14DEC]后卫马克Guard Mark
  9. 在Python中用Selenium执行JavaScript
  10. nodeJS中读写文件方法的区别