在C++中怎么通过New申请多个连续的存储空间?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C++中怎么通过New申请多个连续的存储空间?相关的知识,希望对你有一定的参考价值。
在C++中怎么通过New申请多个连续的存储空间,就好像在C中可以通过p=(int *)malloc(sizeof(int)*10)可以申请是个连续的int型的空间一样?
其实原理是一样的,你需要用new申请一个空间,当然了也需要一个指针来承接申请来的空间。例如:int*p;p=new int[3];申请空间的大小就是3倍的sizeof(int),是连续的。也可以看作是开辟了一个数组。在C++中也可以单独开辟一个整型的空间,比如int*p=new int; 。作用相当于定义了一个整型数据p。一般都是开辟一个数组(即连续的空间)或者一个类。 参考技术A p=new int[10];和
p=(int *)malloc(sizeof(int)*10);
相同本回答被提问者采纳 参考技术B 动态数组、
int *p = new int[5];
谈new
1. New在c++里是用来在堆里申请一段内存。程序结束之前需要用delete手动释放内存。并且不受作用域的控制。
格式:
typename * pointer_name = new typename;
……
delete pointer_name;
如果为数组申请内存,因为数组是存储在连续的一段内存里,所以,
格式:
typename * pointer_name = new typename [num_elements];
……
delete [] pointer_name;
在申请内存的同时,还可以进行初始化,例如:
int *p =new int (4); //*p=4 内置类型
后面两种初始化只适合C++11。
int *p =new int [4] {1,2,3,4};//p[0]=1;p[1]=2;p[2]=3;p[3]=4 数组
where *p =new where {2,5,6};//struct where{int x;int,y;int z};where 为结构体。
2. 定位new运算符,它允许在指定的位置申请内存,不需要用delete。
#include<new>//需要包含该头文件
typename * pointer_name = new (placement) typename;或
typename * pointer_name = new (placement) typename [num_elements];
例如:
#include<new>
char buffer[200];
int *p1= new (buffer) int;//p1指向buffer起始的一个int大小的内存
int *p2 =new (buffer) int [4];//p2指向buffer起始的4个int大小的内存,
int *p3 =new (buffer+4*sizeof(int)) int [4];//p3指向buffer起始开始算起偏移4*sizeof(int)个字节的4个int大小的内存。
以上是关于在C++中怎么通过New申请多个连续的存储空间?的主要内容,如果未能解决你的问题,请参考以下文章