青海高等级公路建设管理局网站,应用软件app,鞋 东莞网站建设 技术支持,优惠券的网站制作导引#xff1a;已知#xff1a;变量在使用前必须被定义且安排好存储空间。且变量有这么一些分类#xff1a;全局变量、静态局部变量【它们的储存一般是在编译时确定#xff0c;在程序开始执行前完成。】自动变量【在执行进入变量定义所在的复合语句时为它们分配存储#…导引已知变量在使用前必须被定义且安排好存储空间。且变量有这么一些分类全局变量、静态局部变量【它们的储存一般是在编译时确定在程序开始执行前完成。】自动变量【在执行进入变量定义所在的复合语句时为它们分配存储变量的大小也是静态确定的。临时定义的变量】。这些都是我们在书写的时候就确定的然后进行编译。
但是一般情况下运行中的很多存储要求在写程序时无法确定。由此我们引入动态存储管理的概念【指的是 不是由编译系统分配的而是由用户在程序中通过动态分配获取】
正文动态内存分配能有效地使用内存让同一段内存可以有不同的用途 因为它有这样两个特点1.使用时申请 2.用完就释放。
动态内存分配的步骤【c语言来说】1.了解需要多少空间2.用c的动态存储分配函数来进行空间的分配储存空间3.使用指针指向该内存空间用指针对内存空间进行修改4.内存完成使命过后释放内存。
下面介绍几种分配函数
(第一种函数申请储存空间)1.malloc()写法如下void *malloc(unsigned size)这表示malloc在动态存储区中开辟的函数大小为size。如果申请成功那么就会返回一个指向所分配内存空间的起始地址的指针如果不成功那么返回NULL它的值为0.【注意返回值类型void * 它是通用指针的一个重要用途 将malloc的返回值转换自己动手到特定指针类型赋给一个指针】。
示例if( ( p(int*)malloc(n*sizeof(int) ) NULL );printf(not able to allocate memory.);(int*)表示强制转换成int型的指针malloc(n*sizeof(int)就是分配函数sizeof(int就是算字长* n代表我需要的空间。调用malloc时用 sizeof 计算存储块大小
每次动态分配都要检查是否成功考虑例外情况处理而且虽然存储块是动态分配的但它的大小在分配后也是确定的不要越界使用。 2.calloc:写法void*calloc(unsinged n,unsigned size)这个函数有两个形参不同于malloc它可以自动将储存块全部转化为0.
重复一遍malloc对所分配的存储块不做任何事情 calloc对整个区域进行初始化
(第二种函数释放储存空间)1.free写法void free(void *ptr).ptr作为指针它指向要释放空间的首地址。
(第三种函数分配调整函数)realloc: 写法void realloc(void *ptr,unsigned size)此函数的作用是重新调整内存空间ptr必须是以前动态分配得到的指针unsigned size是重新需要的空间大小。 如果调整失败那么ptr指向的储存块的内容不变函数返回值NULL。如果调整成功那么新的内存空间就是size且要与原来的储存块一致假如新的内存大一些就在原有的基础上再补如果新的储存块比较小那么就取原来的储存块的前size部分。
如果要确保指针学懂了那么要确认这几点1.掌握指针作为函数的参数进行熟练编程通过函数调用改变主调函数变量的值 2.利用指针进行数组相关操作(1) 实参是数组名 (2) 形参是指针变量 可以写成数组形式 3.能够使用字符串常用处理函数进行编程包含在头文件string.h里面并能使用字符指针进行字符串相关操作利用指针指向系统原有的字符串 4.通过指针实现动态内存分配。