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++之间动态分配内存方式的分别,希望对大家有一点点帮助。
如有错误,请指出,一定加以改正。
原文地址:https://www.cnblogs.com/whtmomo/p/11334494.html
时间: 2024-11-04 11:15:24