堆內存(heap)是什麼呢?
我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態內存空間或者是在棧內存空間內的,但是在實際工作中,我們有時候卻需要動態的為數組分配大小,在這裡c庫中的malloc.h頭文件中的malloc()函數就為您解決了問題,bc或者是在老的標准中是alloc.h),它的函數原形是void* malloc(size_t size),在動態開辟的內存中,在使用完後我們要使用free()函數來釋放動態開辟的內存空間!
下面我們來看一個完整的例子!
C++ 代碼:
- //程序作者:管寧
- //所有稿件均有版權,如要轉載,請務必注明出處和作者
- #include<iostream>
- #include<malloc.h>
- usingnamespacestd;
- main()
- {
- intarraysize;//元素個數
- int*array;//用於動態開辟數組的指針變量
- cin>>arraysize;
- array=(int*)malloc(arraysize*sizeof(int));
- //利用malloc在堆內存中開辟內存空間,它的大小是元素的個數乘以該數據類型的長度
- for(inti=0;i<arraysize;i++)
- {
- array[i]=i;
- }
- for(inti=0;i<arraysize;i++)
- {
- cout<<array[i]<<",";
- }
- cout<<endl;
- free(array);//利用free釋放動態開辟的堆內存空間
- cin.get();
- cin.get();
- }
這裡要特別注意個地方就是:
C++ 代碼:
- array=(int*)malloc(arraysize*sizeof(int));
malloc()的函數原形本身是void* malloc(size_t size),由於動態分配的空間計算機並不知道是用來做什麼的所以是無類型的,但你要把它用在動態的整形數組上的時候就要顯式的轉換成int*了!