动态分布内存

动态分配是程序运行期间根据需要动态的申请或释放内存的方式,它不像数组等静态内存分配方式那样需要预先分配存储空间,而是根据程序的需要适时分配,且分配的大小就是程序要求的大小,因此,动态分配方式有如下特点:

①不需要预先分配存储空间

②分配的空间可以根据程序的需要扩大或缩小

(1)new运算结果是指向分配得到的内存对象的指针,如果没有足够的内存空间可以分配,其运算结果是一个0值指针。

(2)销毁对象后,指针p1变成没有定义,然而它仍然存放先前所指向的对象(已销毁)的地址,因此指针p1不再有效,称这样的指针为迷途指针。通常在delete运算之后将指针重设为0值指针,避免迷途指针。

(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,

②分配数组空间,用来存储数组元素,空间大小按元素个数计算;

③按一维数组方式使用这个数组

若是一维数组,则元素为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;

猜你喜欢

转载自my.oschina.net/u/3749576/blog/1600066