c问题,什么是申请动态内存空间,

看图,那个前一个括号里的int*什么意思,然后整体是什么意思图片


比如说```int a",程序运行时,会在内存中申请一个固定大小的内存空间来储存,按照编译器执行的标准不同,int类型的数据占不同的字节,我们以int占2个
字节为例,这段代码会在内存中申请两个字节的空间,用来储存a的值。这样做的缺点是,a的大小已经固定,不能再次扩充,只能储存两个字节的int数据。

申请动态空间就是在程序运行的时候分配内存空间,用new(C++形式)和malloc(C形式)等。区别于静态空间,后者需要的内存大小在程序编译的时候就能确定下来。
动态空间分配在堆内存上。它的好处是按需使用,用多少申请多少。不过特别要注意释放问题,以免造成内存泄漏。

上述的声明变量方法只能用在你要储存的数据大小已经确定。但如果你不确定要存储的数据的大小,或者在程序执行的时候需要动态的改变数据的大小,就需要用到malloc函数了。它会在内存中申请一段连续的空间,以便你进行存储和扩充。
ptr = (int *)malloc(10*sizeof(int))
这段代码申请了10个int大小的内存空间,前面已经说到,不同编译器int取的大小是不同的,所以用sizeof运算符来计算在当前编译器中int的大小。而(int *) 则做了一个强制类型转换,将申请到的空间的指针转换成int类型。