動態分配是程序運行期間根據須要動態的申請或釋放內存的方式,它不像數組等靜態內存分配方式那樣須要預先分配存儲空間,而是根據程序的須要適時分配,且分配的大小就是程序要求的大小,所以,動態分配方式有以下特色:ios
①不須要預先分配存儲空間數組
②分配的空間能夠根據程序的須要擴大或縮小spa
(1)new運算結果是指向分配獲得的內存對象的指針,若是沒有足夠的內存空間能夠分配,其運算結果是一個0值指針。指針
(2)銷燬對象後,指針p1變成沒有定義,然而它仍然存放先前所指向的對象(已銷燬)的地址,所以指針p1再也不有效,稱這樣的指針爲迷途指針。一般在delete運算以後將指針重設爲0值指針,避免迷途指針。code
(3)用new建立的動態對象使用完後,必須用delete銷燬它。對象
#include<iostream> using namespace std; int *f1(int n) { //分配n個整型內存,返回首地址 int *p = new int[n]; for (int i = 0; i < n; i++) { p[i] = i; } return p; } void f2(int *p, int n) { for (int i = 0; i < n; i++) { cout << *p++ << " "; } } void f3(int *p) { delete[]p; } int main(){ int *pi; pi = f1(5); //分配 f2(pi, 5); //輸出 f3(pi); //釋放 system("pause"); return 0; }
動態分配一維或多維數組的方法是由指針管理數組,二維以上數組按一維數組方式來處理,具體步驟爲:內存
①定義指針p,ci
②分配數組空間,用來存儲數組元素,空間大小按元素個數計算;字符串
③按一維數組方式使用這個數組io
如果一維數組,則元素爲p[i];如果二維數組,則元素爲p[i*M+j],其中M爲列元素個數
④釋放數組空間
#include<iostream> using namespace std; int det(int *p, int n) { int s = 0; for (int i=0; i < n; i++) { for (int j=0; j < n; j++) { s += *(p + i*n + j); } } return s / (n*n); } int main(){ int n; cin >> n; int *p = new int[n*n]; for (int i=0; i < n; i++) { for (int j=0; j < n; j++) { // cin >> *(p + i*n + j); cin >> p[i*n + j]; } } cout << "detp=" << det(p, n); delete[]p; system("pause"); return 0; }
char *p = new char[100]; cin >> p; cout << p; delete[] p;