C++学习:动态内存分配new

C++中的动态内存分配

C++通过new关键字进行动态内存申请(C语言使用malloc函数)

C++的动态内存申请是基于类型进行的

delete关键字用于内存释放(C语言使用free函数)

变量申请

语法:

cpp 复制代码
Type* pointer = new Type;

delete pointer;

程序实例1:变量申请

cpp 复制代码
#include<stdio.h>

int main()
{
	int* p = new int; //在堆空间申请一个int类型的变量,指针p指向该变量
	*p = 5;
	*p = *p + 10;

	printf("p = %p\n", p);
	printf("p = %d\n", *p);

	delete p; //释放堆空间

	return 0;
}

输出结果:

cpp 复制代码
p = 00CF4CA8
p = 15

数组申请

语法:

cpp 复制代码
Type* pointer = new Type[N];

delete[] pointer;

程序实例2:数组申请

cpp 复制代码
#include<stdio.h>

int main()
{
	int* p = new int[10]; //指向一片堆空间,数组空间不小于40个字节,而不一定是40个字节
	for (int i = 0; i < 10; i++)
	{
		p[i] = i + 1;
		printf("p[%d] = %d\n",i,p[i]);
	}

	delete[] p; //释放堆空间

	return 0;
}

输出结果

cpp 复制代码
p[0] = 1
p[1] = 2
p[2] = 3
p[3] = 4
p[4] = 5
p[5] = 6
p[6] = 7
p[7] = 8
p[8] = 9
p[9] = 10

new关键字与malloc函数的区别

new关键字是C++的一部分;

malloc是由C库提供的函数;

new以具体类型为单位进行内存分配;

malloc以字节为单位进行内存分配;

new在申请单个类型变量时可进行初始化;

malloc不具备内存初始化的特性;

程序实例3:new关键字的初始化

cpp 复制代码
#include<stdio.h>

int main()
{
	int*	pi = new int(1); //申请一段内存,int类型,并初始化为1
	float*	pf = new float(2.0f); //申请一段内存,float类型,并初始化为2.0
	char* pc = new char('c'); //申请一段内存,char类型,并初始化为'c'

	printf("pi = %d\n",*pi);
	printf("pf = %f\n", *pf);
	printf("pc = %c\n", *pc);

	return 0;
}

输出结果

cpp 复制代码
pi = 1
pf = 2.000000
pc = c
相关推荐
code_pgf8 小时前
C++11 / C++14 / C++17 / C++20 新特性总结
c++·c++20
魔力女仆8 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_894915539 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
MartinYeung59 小时前
[论文学习]自主性如何重塑个性化对LLM智能体隐私关切与信任的影响
人工智能·学习
麻瓜老宋9 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
FellAveal10 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
菜鸟‍11 小时前
【论文学习】MICCAI 2024 || SGSeg:通过自引导机制实现胸部X光片语言引导分割的无文本推理
人工智能·深度学习·学习
lazy H11 小时前
Git clone 怎么用?克隆项目及常见问题完整教程
大数据·git·后端·学习·搜索引擎·github
菜鸟‍11 小时前
【论文学习】arxiv 2024 || RoSIS:基于鲁棒框架重新审视文本提示式手术器械分割
人工智能·学习·计算机视觉
颜x小11 小时前
[C#] C++与c#语法对比
开发语言·c++·c#