part03-动态内存分配
Posted flying_1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了part03-动态内存分配相关的知识,希望对你有一定的参考价值。
目录
1、背景
动态内存分配存在的意义就是更高效的利用内存空间,简单来说,用多少给多少,而不是提前开辟很大的内存空间,但不用那么多,类似数组。c语音通过malloc来实现,那么c++呢?
2、new运算符实现动态内存分配
1>分配一个变量
P = new T;
T 是任意的类型名, P 是T * 的指针。
动态分配出一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P,如下
int * p;
p = new int;
*p = 1;
例题1.1
表达式 “new int”的返回值类型是:
-
A) int
-
B) int *
-
C) int &
-
D) void
2>分配一个数组
P = new T[N];
T: 任意类型名
P: 类型为T*的指针
N: 要分配的数组元素个数,可以是整形表达式
动态分配出一片大小为N * sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P,示例如下
int * p;
int i = 5;
p = new int[i*20];
p[0] = 1;
p[100] = 2;//编译ok,运行报错,数组越界,只能0-99
小结一下:
📢:1>P = new T;
2>P = new T[N];
他们的返回值都是T*
3、delete 运算符释放new分配的动态内存空间
万物皆有轮回,有new来创建,对应的就有delete来释放。
1>释放动态分配的变量
用new创建的内存空间,一定要用delete来释放掉!
delete 指针;//该指针必须指向new出来的空间
int *p = new int;
*p = 1;
delete p;
delete p;//异常;同一片内存空间不能被delete多次
2>释放动态分配的数组
delete [] 指针;//该指针必须指向new出来的数组
int * p = new int[20];
p[0] = 1;
delete []p;
例题1.2
下面小段程序,哪个是正确的:
A) char * p = new int;
p = 'a';
delete p;
B) int *p = new int[25];
p[10] = 100;
delete p;
C) char * p = new char[10];
p[0] = 'K';
delete [] p;
D)都不对?
例题的答案,和之前一样,会放到评论区~
以上是关于part03-动态内存分配的主要内容,如果未能解决你的问题,请参考以下文章