学到这里了,大家应该对C语言的了解跟深一层了吧。我们C语言写代码不能只局限于直接写代码。我们要了解C语言的内存分布,我们都知道C语言的内存是有堆区,栈区,静态区的。然后栈区是我们平常创建临时变量存储的地方,静态区是我们全局变量,和静态变量。堆区就是动态内存了,并且我们今天讲的就是关于堆区的相关知识大家看一张图片可能会更加了解一些。
动态内存
当然我们学习动态内存首先要知道什么是动态内存,为什么会存在,怎么使用。
什么是动态内存,大家可以先看,名字中有一动而且后面跟着一个内存这说明什么,说明它可以改变吧,改变内存,那怎么改变嘞,这就是我们的第三个问题,如何使用了。我们下来处理第二个问题,为什么会存在动态内存。其实这个我认为给大家举一个例子,大家可以感受的更加深刻一些
我们可以看到我首先创建看了一个变量y是int类型的,有4个字节,那么至少在现在我们看到y是被确定为4个字节的无法改变的吧,那么我们想改变y的直接大小或者直接改为数组的话,是不是只能在这里重新写。然后我为什么需要改,那时因为y只有4个字节不能满足我的需要了,那么我肯定是写了一些代码才发现这个不能满足我的需求了才改的呀。那这些代码只要涉及到了我的y是不是就要跟着改变要,很麻烦吧,而且要是一个不小心有一个没改掉是不是就出现BUG了。然后就是下面的,大家可能会说那我先不写有多少字节,我先创建最后写完了,看需要多少,我在写多少不就行了,诶,刚开始看好像还可以,但是大家想想,我们现在才写多少行代码呀,我们可以最后计算,那要是我们工作了做项目,写几百行代码几千行代码,我们最好一个一个数,那岂不是又做了一遍呀,而且一个不小心又要找BUG。所以这个时候就体现出来动态内存的重要性了。我先申请一部分内存,要是不够我就在申请一点,但是以前的是不会消失的,我们只需要接着写就行了。用完了以后返回去,像借东西一样,我要用先借一点不够再借一点,用完了以后还回去。动态内存差不多就是这样。
malloc
好,那么我们就像来看看我们动态内存的第一个相关的库函数malloc,如果依据前面的那个例子的话,这个就是我们借东西的借条,好比我们向图书馆借书,我们肯定要先写借记卡吧,这是我们借东西的前提。那么malloc就是我们向堆区借内存的借据,并且堆区很大方,只要我们借并且成功的话内存都是连贯的。好了我们大概知道了malloc的作用了,那么我们就来学习如何使用吧。
void* malloc (size_t size);
首次运用这个库函数我们需要的头文件是<stdlib.h>,接着如果开辟成功,则返回⼀个指向开辟好空间的指针。 如果开辟失败,则返回⼀个 NULL 指针,因此malloc的返回值⼀定要做检查。其次是,我们开辟内存在运行的时候其实是无法看出是否开辟成功的,所以我们需要检验我们是否开辟成功。然后就是void*,为什么我们要用void*那时因为我们开辟内存,我们知道开辟的内存是类型的,但是系统不知道啊,在没运行