一、C++当中的内存分配
C++ new delete
int *p
int* p[4]; 指针数组
int (*p)[4]; 数组指针 二维
int* p(); 返回值是指针的函数 即 指针函数.
int (*p)();函数针指
二、C语言的内存分配方式:malloc/calloc/realloc/ free
函数的功能与区别:
malloc 申请空间,什么也不干
calloc 申请空间,将申请的空间清零
以上这些都是函数
new delete 都是关键字,而且在new类时会调用构造函数三、动态内存分配延伸
1、使用new申请多维数组的内存空间
2、int arr[5];整型数组,数组中每一个元素都是整型数
3、int* arr[5];指针数组,数组中每一个元素都是指针
//(首先arr先与*结合,说明他是个指针;其次和中括号结合,表示它是一个指向长度为5的数组的指针,最后与int结合,表示数组中每一个元素是int类型)
//int (*arr)[4] = new int[3][4];
namespace FunMemory
{
//C Type
void pCFun()
{
int* p = (int *)malloc(sizeof(int));
if(NULL == p)
{
cout<<"malloc is failed!"<<endl;
}
else
{
*p = 100;
cout<<*p<<endl;
}
free(p);
p = NULL;
}
//C++ Type
void pCPPFun()
{
int* p = new int(200);
cout<<*p<<endl;
delete p;
p = NULL;
}
void pCPPArrayFun() //一维数组
{
int* p = new int[4];
for (int i = 0 ; i < 4 ; ++i)
{
cout<<p[i]<<endl;
}
delete[] p;
p = NULL;
}
void pCPPArray2Fun() //二维数组
{
int (*pp)[4] = new int[4][4];
for (int i = 0 ; i < 4 ; ++i)
{
for (int j =0 ; j < 4 ; ++j)
{
cout<<pp[i][j]<<endl;
}
}
delete[] pp;
pp = NULL;
}
void pCPPArray3Fun() //三维数组
{
int (*ppp)[4][4] = new int[4][4][4];
for (int i = 0 ; i < 4 ; ++i)
{
for (int j =0 ; j < 4 ; ++j)
{
for (int k = 0 ; k < 4 ; ++k)
{
cout<<ppp[i][j][k]<<endl;
}
}
}
delete[] ppp;
ppp = NULL;
}
四、定位分配空间
在分配内存的时候指定初始位置
格式:new(指针) 数据类型(初始值);
|
分配内存时的起始位置.
{
char* buf = new char[100];
int* pN = new(buf) int[10];
delete[] buf;
}
void pCPPExEx()
{
//分配的空间在栈区
int arr[2];
//分配的空间在堆区
int * p = new int(66);
delete p ;
p = NULL;
//new的是栈区
p = new(arr) int(0x31323334); //人这一点可以说明new的空间不一定都是在堆的,也可能是在栈上的。
cout<<"*p = "<<showbase<<hex<<*p<<endl;
cout<<"arr[0] = "<<arr[0]<<" arr[1] = "<<arr[1]<<endl;
cout<<"arr = "<<arr<<" p "<<p<<endl;
}
}