我們在c語言中學過malloc函式,來動態分配記憶體空間,然而在c++中我們用的是new運算子。強調一下,malloc();是函式。而new是運算子,和sizeof()不是函式乙個意思。
我們首先來看看malloc函式。查閱msdn:
void *malloc(可以看出,函式返回的是乙個指向空的指標,而函式的行參是乙個size_t的size,size_t是這麼定義的:typedef unsigned int size_t; 也就是說size是乙個unsigned int型別的。那麼問題來了,怎麼讓mallo函式返回乙個指向特定的資料的指標呢。我們可以看msdn給出的例子:size_t size
);
#include // for _max_path definition_max_path是包含在stdlib.h中的巨集常量,#include #include int main( void )
}
它定義了編譯器所支援的最長全路徑名的長度(
length of full pathname記住:一定要free( );
void free(接著,我們來看看new運算子。void *memblock
);
第一種用法:p = new t;// p 是指向t型別的指標,t是任意資料型別。用法,int * ptr = new int; *ptr = 5;delete ptr; //這兩句話的解釋如下,首先給分配乙個int型大小的記憶體空間(4位元組)然後給這個空間的首位址返回給ptr,我們就可以通過*ptr = 5往這塊空間裡面寫數值了。當然,一定要記得delete ptr ;
第二種用法:p = new t[n]; t:任意資料型別,比如char[n],int[n];這句話,就是說,動態分配乙個陣列記憶體,返回的是指向陣列首位址的指標。例如: char *ptr = new char[10]; prt[0] = 'a';delete ptr;//首先給乙個字元陣列分配記憶體,記憶體大小為:10*sizeof(char),這裡不同的是,在delete的時候,一定要注意delete [ ]ptr;否者記憶體將會釋放不乾淨。
延伸一下:memset(); 看msdn就夠了,不需要解釋:
void *memset(void *dest,
int c,
size_t count
);
#include #include int main( void )注意,memset();函式第二個引數是傳入乙個int 型,所以在例子中,我們要'*',即傳入了ascii碼。
舉栗子:int *ptr = new int[5]; memset(ptr,0,5*sizeof(int));這樣就完成了初始化。當然,也可以用乙個for迴圈。
下面是分配乙個二維陣列,10行5列,以及進行memset,自己注意看看。
int **array;
array=new int *[10];
for(int i=0;i<10;i++)
C 學習筆記 動態分配記憶體
在c語言中,動態分配記憶體時一般使用malloc 函式,但是對於非內建資料型別 如struct,enum,class等 malloc 與free 無法滿足動態物件的需求,因此c 引入new與delete關鍵字,用來進行記憶體申請與釋放空間。下面是使用 new 運算子來為任意的資料型別動態分配記憶體的...
分配記憶體空間
void calloc size t nobj,size t size 分配足夠的記憶體給nobj個大小為size的物件組成的陣列,並返回指向所分配區域的第乙個位元組的指標 若記憶體不夠,則返回null.該空間的初始化大小為0位元組.char p char calloc 100,sizeof cha...
動態分配記憶體(學習筆記11)
函式原型 stdlib.h void malloc size 分配size大小的記憶體,返回指向所分配記憶體的指標,分配不成功,返回null void calloc num element,length of element 分配num element length of element 大小的記憶...