动态内存划分

本文详细介绍了存储分配的概念,包括静态存储分配及其优缺点,以及动态存储分配的不同格式和释放方法。通过示例代码展示了如何在程序运行时根据需求动态分配内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.存储分配

存储分配就是为程序中用到的数据分配存储空间。

2.静态存储分配内存

通常变量数组都是先定义再使用,定义后编译器就可以根据其类型确定其所占存储空间的大小。

2.1静态存储空间分配的优点:

用户在编程时,只需定义变量或数组即可,等到变量或者数组的生命周期结束,编译器自动释放其分配的存储空间,不需要用户自己编程进行释放存储空间;生命周期结束后自动释放存储空间

2.2静态存储空间分配的缺点:

静态存储空间的大小必须是常量;即定义后不能再程序执行时进行更改其大小;

3.动态存储分配

在程序运行时,系统根据运行时的要求分配内存;

3.1 格式1:分配单个空间

指针变量=new 类型名 (初始化变量)//系统分配一个和类型名一致的变量空间,并用初值为这个空间赋值,同时将该空间的首地址返回;

int *p=new int(8);//表示系统在内存中分配了一个整型变量空间,同时初始化为8,并将其首地址赋值给指针变量p;

3.3 格式2:分配连续空间(数组)

指针变量=new 类型名 [元素个数]//分配连续空间时不能初始化;


int *p=new int[100];

3.2 格式3:分配大小不知的存储空间

int *p=new int;//分配一个整形变量空间,此时该空间未被初始化。
  • 因为内存的资源是有限的,所以动态分配存储空间,尤其是较大的数组空间时,有可能分配失败!这时new返回一个空指针(NULL),表示发生了异常,资源不足,分配失败。所以需要在程序中判断这个返回值,防止程序出现异常;

  • 用new运算符分配的存储空间,系统不能自动释放。如果不再使用该空间时,要显式的释放它所占用的存储空间,否则该存储空间一直保留。

4.动态空间释放

delete  指针名;

//释放连续存储空间

delete []指针名;
#include<iostream>
using namespace std;
int main()
{
	int* p, n;
	double s = 0;
	cout << "请输入学生的人数:" << endl;
	cin >> n;
	p = new int[n];
	if (p == NULL)
	{
		cout << "分配空间失败!" << endl;
		return -1;
	}
	for (int i = 0; i < n; i++)
	{
		cout << "请输入第" << i + 1 << "个学生的成绩:";
		cin >> p[i];
		s = s + p[i];
	}
	cout << "学生的平均成绩是:" << s / n << endl;
	delete[]p;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值