(10.14)4学习C版数据结构中熟悉malloc函数与C++中的new函数

 最近学了C语言版的数据结构,一堆堆都是动态空间的分配问题,丫的,一堆堆的malloc函数,分配失败又如何如何的……⊙﹏⊙b汗,真是相当麻烦,自己还是喜欢用C++newdelete,于是毅然决定稍稍把之前学过的C++内容稍稍的总结一下。

 

  C语言是利用malloc函数和free这两个库函数完成动态存储分配和释放存储空间的功能的。

  函数原型为:

void *malloc(size_t  size)

void free(void  *p)

 

C风格的动态内存分配和释放

 

#include

#include

#include

 

void main()

{

   char *ptext;

   

   ptext (char*)malloc(sizeof(char)*80);

   strcpy(ptext,c风格的内存分配);

   if(ptext==NULL)

   {

      printf(分配内存失败\n);

      return 0;

   

   printf(%s\n,ptext);

   free(ptext);

}

 

 ptext (char*)malloc(sizeof(char)*80); →这个系统的内存没这么大就申请不下来就是空

         

这个表示是将void转换成char类型,具体看一下原型就懂

 

所以后面才会有个判断ptext是否为空的语句。

 

程序的输出就是:

c风格的内存分配。

 

如果没有足够的内存可以分配就是输出:

分配内存失败。

 

 

mallocfree的缺点:

1)malloc函数的参数,要计算内存大小

2)malloc函数返回类型是void *,程序员必须自己转化一下指针类型。

 

 

 

C++中拥有的新运算符:newdelete函数

 

优点:

1)自动分配类型大小

2)自动返回指针类型

3)可以用new将分配的存储空间初始化

 

运算符new用于内存分配时的使用形式为:

指针变量名 new [(指针基类型名表达式)|[整式类型名]];

 

“指针基类型”是指针变量指向的类型。如果没有方括号中的选项,那么new 将分配一个指针及基类的单元,并返回那个单元的地址给指针变量。

 

如:

double *p;

p= new double;

 

1)圆括号()中的指针基类型,意思就是用表达式的值来初始化指针指向的单元

   new double (1.0);

单元地址的初始值就是1.0

2)方括号 []里的整形表达式就是要分配一个数组,表达式的值是数组的长度。

   p=new double[10];

p指向了长度为10double数组的第一个元素。相当于double p[10];

会用到的功能p=new double [n];    n可以输入进来

 

删除的时候注意:

用圆括号,直接delete p

用方括号 delete []p ,不需要考虑要回收空间的大小就ok了。 删的是数组

 

动态分配和释放单个存储区的例子

#include

using namespace std;

 

int main()

{

   int *p;

   p=new int;

  if(!p)  //p==NULL

  {

      cout<<内存分配错误<<endl;

      return 1;

  

  *p=20;

  cout<<*p<<endl;

  delete p;

  return 0;  

}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值