動態分佈內存

 

動態分配是程序運行期間根據須要動態的申請或釋放內存的方式,它不像數組等靜態內存分配方式那樣須要預先分配存儲空間,而是根據程序的須要適時分配,且分配的大小就是程序要求的大小,所以,動態分配方式有以下特色: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;
相關文章
相關標籤/搜索