传 统 数 组 的 缺 点 .

1. 数 组 长 度 必 须 事 先 制 定 , 且 只 能 是 常 整 数 , 不 能 是 变 量
例 子 :
int a[5] ;/ / 0K
int len = 5 ; int a[len]; //error
2 . 传 统 形 式 定 义 的 数 组 , 该 数 组 的 内 存 程 序 员 无 法 手 动 释 放
在 一 个 函 数 运 行 期 间 , 系 统 为 该 函 数 中 数 组 所 分 配 的 空 间
会 一 直 存 在 , 直 到 该 函 数 运 行 完 毕 时 , 数 组 的 空 间 才 会 被
系 统 释 放
数 组 的 长 度 一 旦 定 义 , 其 长 度 就 不 能 在 更 改
数 组 的 长 度 不 能 在 函 数 运 行 的 过 程 中 动 态 的 扩 充 或 缩 小
生 A 函 数 定 义 的 数 组 , 在 A 函 数 运 行 期 间 可 以 被 其 它 函 数 使 用 ,
但 A 函 数 运 行 完 毕 之 后 , A 函 数 中 的 数 组 将 无 法 在 被 其 他
函 数 使 用
传 统 方 式 定 义 的 数 组 不 能 跨 函 数 使 用

为 什 么 需 要 动 态 分 配 内 存

动 态 数 组 很 好 的 解 决 了 传 统 数 组 的 这 4 个 缺 陷
传 统 数 组 也 叫 静 态 数 组

动 态 内 存 分 配 举 例 一 动 态 数 组 的 构 造

#include <stdio.h>
#include <stdlib.h>
int main()
{int i=5;int *p=(int *)malloc(sizeof(int));*p=5;printf("%d",*p);free(p);}

如何调用指针,修改值

#include <stdio.h>
#include <stdlib.h>
void fun(int *q)
{*q=10;
}
int main()
{int *p=(int *)malloc(sizeof(int));fun(p);printf("%d",*p);free(p);}

动态构造一维数组

#include <stdio.h>
#include <stdlib.h>
void fun(int *q)
{*q=10;
}
int main()
{int len;scanf("%d",&len);int *arr=(int *)malloc(sizeof(int)*len);//类似于 int arr[len];for(int i=0;i<len;i++)scanf("%d",&arr[i]);for(int i=0;i<len;i++)printf("%d",arr[i]);return 0;}

动 态 内 存 和 静 态 内 存 的 比 较

静 态 内 存 由 系 统 自 动 分 配 , 由 系 统 自 动 释 放 ( 在 栈 分 配)
动 态 内 存 由 程 序 员 手 动 分 配 , 手 动 释 放(在 堆 分 配 )

多级指针

跨 函 数 使 用 内 存 的 问 題

静态内存
下面这个程序是错误的,因为i 为静态分布的,在被调函数结束后,就释放了

#include <stdio.h>
#include <stdlib.h>
void f(int **q)
{int i=5;*q=&i;}
int main()
{int *p;f(&p);printf("%d\n",*p);return 0;}

动态内存

#include <stdio.h>
#include <stdlib.h>
void f(int **q)
{*q=(int *)malloc (sizeof(int ));**q=5;//*p=5//q=5;//error 地址//*q=5;//error p=5 p是地址}
int main()
{int *p;f(&p);printf("%d\n",*p);return 0;}

C语言_指针动态内存分布相关推荐

  1. c语言链表内存分配失败,链表的C语言实现之动态内存分配

    链表的C语言实现之动态内存分配 來源:互聯網  2008-06-01 02:05:07  評論 一.为什么用动态内存分配 但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是 ...

  2. C++面试题-指针-动态内存指针

    C++面试题-指针-动态内存指针 问:什么是内存泄漏和内存溢出? 答:内存泄漏:在程序申请内存后,该内存不再会被引用,但是不能释放该内存空间.如果你delete指针之后,该空间不能归还,自己又不能进行 ...

  3. 动态内存分布——malloc,calloc,realloc,free的使用。以及关于动态内存的常见错误。

    我们知道内存的使用方式,可以在栈区,静态区,堆区,申请空间来储存变量. 但是他们这些内存区所存储的东西是不一样的. 局部变量 函数的形式参数 栈区 动态内存分配申请的空间 malloc,calloc, ...

  4. c语言链表动态分配内存,链表的C语言实现(含动态内存分配)

    转自:http://blog.csdn.net/21aspnet/article/details/146968 链表的C语言实现(含动态内存分配) 上 链表的C语言实现之动态内存分配 一.为什么用动态 ...

  5. C语言中的动态内存分配

    大家好,今天简单讲一讲C语言中的动态内存分配. 补充:C程序中的内存块. 在C程序中,通常将内存划分为以下六个区域: (1)内核区域.这块区域是操作系统的,用户不能使用. (2)栈区.主要用于存放运行 ...

  6. c语言开劈动态内存的操作以及相关知识

    首先我先介绍一下开劈动态内存的作用和好处,也就是为什么要有这个东西,大家都知道一般的定义数组的话在程序开始执行的话就已经固定无法改变,比如:如果想要定义整型变量n要开劈n个int类型的空间,显然传统方 ...

  7. C++虚函数表,虚表指针,内存分布

    虚函数表和内存分布那一块转载自:https://blog.twofei.com/496/ 虚函数效率转载自:https://www.cnblogs.com/rollenholt/articles/20 ...

  8. c语言十七:动态内存申请

    动态内存申请 一 动态内存申请 二 静态分配内存和动态分配内存 2.1 静态分配内存 2.2 动态分配内存 三 动态内存申请的相关函数 3.1 分配内存空间函数 malloc 3.2 free函数 ( ...

  9. C语言 :学习动态内存分配

    文章目录 C语言动态分配 为什么存在内存分配? 动态内存函数的介绍 `malloc` `free` `free`函数的**作用原理**是: 使用后将指针赋为`NULL` `calloc` 运用一次`c ...

最新文章

  1. Unity持久化存储之PlayerPrefs的使用
  2. 解决IntelliJ IDEA报错Error: java: 错误: 不支持发行版本 XX
  3. Android 自定义View消除锯齿实现图片旋转,添加边框及文字说明
  4. Spring Boot JWT 快速入门
  5. 51NOD 1088 最长回文子串1089 最长回文子串 V2(Manacher算法)
  6. html标签企业级命名规范
  7. Centos5.11 //IP/phpmyadmin 远程无法登入
  8. cad坐标提取插件_如何快速地将CAD里的坐标提取到Excel中?最简单的方法你知道吗?...
  9. ElementUI:使用nav报错Invalid prop: custom validator check failed for prop “index“.
  10. 数据库的主键Id不是从1开始的
  11. html文件文本预处理,HTML文件文本信息预处理技术.pdf
  12. 素数表(Eratosthenes)
  13. swift野梦抄袭 taylor_断眉质疑Taylor Swift新歌抄袭《Next to Me》,双方粉丝掀起骂战...
  14. Unity ShaderLab Stencil Comp 枚举的对应数值
  15. (1)asp。net操作ftp,上传和下载 (2) 长时间提交,在提交后禁止页面按钮 (3) 方便的javascript日历
  16. 数据加解密之Java实现Base64加密
  17. 西门子s7-300/400PLC-MMC密码解密
  18. zz:Android 层次化安全架构
  19. Landsat8卫星介绍
  20. 黑马优购商城首页的实现

热门文章

  1. BFD快速检测工作原理
  2. 中科院谭铁牛爱徒研发出《碟中谍5》中的步态识别技术,不看脸50米内在人群中认出你
  3. linux `uname -r`作用
  4. 二进制,八进制,十进制,十六进制转换算法
  5. 阿德莱德大学计算机专业学费,阿德莱德大学本科及研究生学费是多少(含各专业学费)?...
  6. 如何判断Android app退后台、进前台
  7. 【Android】判断你的应用在前台还是在后台
  8. PHP 识别获取身份证号代表的信息
  9. windows7系统损坏修复_利用老毛桃系统修复Windows引导故障
  10. Markdown笔记利器:Typora主题-最美的模板