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++之間動態分配內存方式的分別,希望對大家有一點點幫助。

如有錯誤,請指出,一定加以改正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM