上一个版本的通讯录我们实现了通讯录的增删改查找和展示已有联系人信息的功能,但是我们开始定义了一个num个元素的联系人数组来保存各个联系人的信息可是当联系人个数超出num时就会发生数组下标越界问题或者是在程序运行初始我们没有联系人信息的时候却仍然创建了这样一个大小固定的数组,比较占用内存,为了解决这一问题我们就要使用柔性数组来保存联系人信息,所谓柔性数组就是大小可以改变的数组但是它在堆上创建。这就不得不讲动态内存管理的相关知识了。
首先为什么要存在动态内存分配呢?
我们知道通常我们在栈空间上开辟连续空间(为数组开辟空间的时候)我们必须指定数组的长度这样在编译的时候才能为它分配所需要的内存。这种一般开辟内存的方式只能在栈空间上开辟少量的空间,而在堆上我们可以开辟大量的空间并且这种开辟内存的方式不够灵活,不能解决需要动态确定数据的问题,而动态开辟空间则可以解决不定长的数据保存问题。
如何进行动态内存分配呢?其实主要是依赖于函数来实现的。
1.malloc函数
malloc函数可以向内存申请一块连续可用的空间,如果开辟成功则返回指向这块空间的指针。
malloc函数的参数是你想要开辟的空间大小注意他的单位是字节,它的返回值类型是void*这就说明了如果你想要对它开辟的空间进行操作(好像一句废话)就必须强转它的返回值类型,强转为你要用这块空间保存的数据类型。而对于malloc函数,它不一定能成功开辟你想要的空间这就需要程序员对它的返回值做出判断。
malloc函数如果开辟空间成功则就会返回一个指向开辟好空间的指针;
如果开辟空间失败则会返回一个NULL指针,所以一定要对mall