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++之間動態分配內存方式的分別,希望對大家有一點點幫助。
如有錯誤,請指出,一定加以改正。