C++当中的内存分配

一、C++当中的内存分配

C++ new  delete

int *p


int* p[4];   指针数组

int (*p)[4]; 数组指针 二维

int* p(); 返回值是指针的函数 即 指针函数.

int (*p)();函数针指


二、C语言的内存分配方式:malloc/calloc/realloc/ free


函数的功能与区别:


malloc 申请空间,什么也不干


calloc 申请空间,将申请的空间清零


realloc 扩充空间,在原来的基础上扩充空间


以上这些都是函数

new delete 都是关键字,而且在new类时会调用构造函数


三、动态内存分配延伸

        1、使用new申请多维数组的内存空间


        2、int arr[5];整型数组,数组中每一个元素都是整型数


        3、int* arr[5];指针数组,数组中每一个元素都是指针


       4、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(指针) 数据类型(初始值);
                                |

              分配内存时的起始位置. 


void pCPPEx()
{
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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值