C与C++申请动态内存空间的异同教程
C与C++申请动态内存空间的异同
C语言与C++的关系,我们可以这样来形容,C++继承于C语言,却两者都有各自独特的特性,比如在如何申请动态内存空间上有显著的差别。
首先我们要知道,为什么需要动态申请内存空间?
与动态分配相对应的是静态分配,在计算机中,内存分为栈区和堆区,其中栈区的空间相对于堆区会小很多,可以理解为,自己的家和仓库。
静态分配是在栈区提前分配一个固定大小的空间,而动态分配是需要多少分配多少,需要注意的是,动态分配需要程序员维护内存。
说了大致的分别,现在我们来看C语言和C++动态分配内存空间的区别:
下面是C语言动态分配方式的样式代码:
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 int *p;
5 p = (int*)malloc(sizeof(int));
6 *p = 4;
7 printf("%d\n",*p);
8 free(p);
9 return 0;
10 }
C语言动态分配内存需要一个名叫malloc() 函数,以及free()函数用来释放内存,这两个函数需要导入头文件"stdlib.h"。
malloc函数默认为void*类型,它的参数为申请空间的大小,malloc函数如果需要返回地址,则需要强转为指定类型,在上面代码中,需与指针p类型相匹配,则用(int*)强转,
free函数释放内存。它的参数为需要释放空间的指针。注意:一定要释放内存,不然会造成空间浪费。
下面是C++动态分配内存的样式代码:
1 #include <iostream>
2 using namespace std;
3 int main(){
4 int *p1 = new int;
5 *p1 = 4;
6 cout<<*p1<<endl;
7
8 int *p = new int[3];
9 p[0] = 1;
10 p[1]=2;
11 p[2] = 3;
12 p[3] = 4;
13 cout<<p[0]<<" "<<p[1]<<" "<<p[2]<<" "<<p[3]<<endl;
14
15 delete p1;
16 delete []p;
17 return 0;
18 }
C++的动态内存分配不需要导入头文件,它具有new 和delete两个关键字用来行使这个功能,上述代码强调了常量与数组的区别,最大的区别在于释放内存的方式,C++分配内存的方式的优势在于,它不再需要计算数据类型的大小,也就是不需要再使用sizeof函数,相对来说,要方便一些。
好了,以上就是今天所说的,C语言与C++之间动态分配内存方式的分别,希望对大家有一点点帮助。
如有错误,请指出,一定加以改正。