//C语言中内存申请
int* pC =(int*)malloc(sizeof(int));
free(pc);
pC=nullptr;
//cpp:使用new 和 delete
int* pcpp= new int;
delete pcpp;
二维数组
//c语言
int** pC =(int**)malloc(sizeof(int*)*3);
//pC[i]都是一个一级指针
for (int i =0; i<3; i++) //3行
{
pc[i]= (int*)malloc(sizeof(int) * 4); //4列
}
//cpp
//申请
int** p= new int*[4];
for (int i = 0; i<4; i++) //4行
{
p[i] = new int[8]; //8列
}
//释放
for (int i = 0; i <4; i++)
{
delete[] p[i];
}
delete[] p;
用子函数实现
//返回值方式
int** myMalloc(int row,int cols){
int** p = new int* [row];
for (int i=0;i<row;i++)
{
p[i]=new int[cols];
}
return p;}
//传参的方式
void myMalloc(int** &p, int row, int cols){}
p=new int* [row];
for (int i=0; i< row; i++)
{
p[i]=new int[cols];
}}
//二次申请
char* memory = new char[1024];
//memory:表示的是从那个位置开始申请内存
int* pInt = new(memory) int[3];
//pInt + 3:表示的是从那个位置开始申请内存
char* pStr = new(pInt + 3) char[10];
//等效: char* pStr=new(memory+sizeof(int)*3
//即new之后的第一个括号表示从哪里开始申请,括号后跟申请的类型和空间