1.分配内存空间函数malloc

  调用形式: (类型说明符) malloc (size) 功能:在内存的动态存储区中分配一块长度为”size” 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。

2.分配内存空间函数 calloc

  calloc 也用于分配内存空间。调用形式: (类型说明符)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。
  malloc它允许从空间内存池中分配内存,malloc()的参数是一个指定所需字节数的整数.
例如:P=(int*)malloc(n*sizeof(int));
colloc与malloc类似,但是主要的区别是存储在已分配的内存空间中的值默认为0,使用malloc时,已分配的内存中可以是任意的值.
colloc需要两个参数,第一个是需要分配内存的变量的个数,第二个是每个变量的大小.
函数原型不同:
void malloc(unsigned size)//动态申请size个字节的内存空间;功能:在内存的动态存储区中分配一块长度为” size” 字节的连续区域。函数的返回值为该区域的首地址。。(类型说明符)表示把返回值强制转换为该类型指针。

(void *)calloc(unsigned n,unsigned size)// 用于向系统动态申请n个, 每个占size个字节的内存空间; 并把分配的内存全都初始化为零值。函数的返回值为该区域的首地址

(void *)realloc(void *p,unsigned size)//将指针p所指向的已分配内存区的大小改为size

区别:两者都是动态分配内存。主要的不同是malloc不初始化分配的内存,已分配的内存中可以是任意的值. calloc 初始化已分配的内存为0。次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。

malloc它允许从空间内存池中分配内存, malloc()的参数是一个指定所需字节数的整数.
例如:P=(int*)malloc(n*sizeof(int));

colloc与malloc类似, colloc需要两个参数,第一个是需要分配内存的变量的个数, 第二个是每个变量的大小.
例如:P=(int*)colloc(n,sizeof(int));

例,申请一个字符大小的指针
char p=(char )malloc(sizeof(char)); //当然单个是没有什么意义的申请动态数组或一个结构,如

char str=(char )malloc(sizeof(char)*100); //相当于静态字符数组str[100],但大小可以更改的

typedef struct pointer
{ int data;
struct pointer *p;
} pp;

pp p=(pp )malloc(sizeof(struct pointer)); //动态申请结构体空间

void *malloc( size_t size ); //分配的大小

void *calloc( size_t numElements, size_t sizeOfElement ); // 分配元素的个数和每个元素的大小

共同点就是:它们返回的是 void * 类型,也就是说如果我们要为int或者其他类型的数据分配空间必须显式强制转换;

不同点是:用malloc分配存储空间时,必须由我们计算需要的字节数。如果想要分配5个int型的空间,那就是说需要5*sizeof(int)的内存空间:

int * ip_a;
ip_a = (int*)malloc( sizeof (int) * 5 );

而用calloc就不需要这么计算了,直接:

ip_a = ( int* )calloc( 5, sizeof(int) );这样,就分配了相应的空间,而他们之间最大的区别就是:用malloc只分配空间不初始化,也就是依然保留着这段内存里的数据,而calloc则进行了初始化,calloc分配的空间全部初始化为0,这样就避免了可能的一些数据错误。

先写段代码体验体验….

include

using namespace std;

void main()
{
int * ip_a;
int * ip_b;

ip_a = (int*)malloc( sizeof (int) * 5 );
for( int i = 0; i < 5; i++ )
{
cin>>ip_a[i];
}
for( int j = 0; j < 5; j++ )
{
cout<

malloc()与calloc区别相关推荐

  1. malloc()与calloc区别【转】

    转自:http://blog.csdn.net/firecityplans/article/details/4490124/ 版权声明:本文为博主原创文章,未经博主允许不得转载. Both the m ...

  2. malloc 和 calloc的区别?

    函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别.malloc()函数有一个参数,即要分配的内存空间的大小:void *malloc(size_t size);call ...

  3. malloc与calloc的区别

    malloc()与calloc() C语言跟内存分配方式     1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.   ...

  4. malloc()和calloc()有啥区别

    malloc和calloc函数在参数百个数.初始化内存空间.函数返回值上有区别: 1.参数个数上的区别: malloc函数:malloc(size_t size)函数有一个参数,即要度分配的内存空间的 ...

  5. malloc和calloc之间的区别?

    做的有什么区别: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); 要么: ptr = (char **) calloc (MAXELEMS, s ...

  6. alloc()、malloc()、calloc()、realloc()区别及用法

    C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别.  ...

  7. calloc() 和malloc() 有什么区别?

    calloc() 和malloc() 有什么区别?利用calloc 的零填充功能安全吗?free() 可以释放calloc() 分配的内存吗,  还是需要一个cfree()? calloc(m, n) ...

  8. kmalloc、vmalloc、malloc、calloc的区别

    1.kmalloc和vmalloc是分配的是内核的内存,malloc.calloc分配的是用户的内存; 2.kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续, ...

  9. C99 calloc、malloc和realloc区别

    2018-01-26 创建人:Ruo_Xiao 参考文档:C99标准 邮箱:xclsoftware@163.com 一.共同点 均来自头文件:stdlib.h 分配的内存都是连续的. 返回值为void ...

最新文章

  1. HBuilder 的快捷键
  2. 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO
  3. arcgis python工具-使用python制作ArcGIS插件(1)工具介绍
  4. 【集合论】卡氏积 ( 卡氏积概念 | 卡氏积示例 | 卡氏积性质 | 非交换性 | 非结合性 | 分配律 | 有序对为空 | n 维卡氏积 | n 维卡氏积个数 | n维卡氏积性质 )
  5. 201771010102 常惠琢 《2018面向对象程序设计(Java)》第9周学习总结
  6. 【Tools】VNC Viewer 6.20安装详解
  7. [转载] java语言程序设计-基础篇
  8. 因策划进军餐饮等虚假营销 TikTok前营销主管被开除
  9. c语言代码题及答案,c语言编程题精选及答案
  10. 在div 底部显示背景图片
  11. 让cat命令有颜色得输出文件(ccat)
  12. db4o java_DB4O 社区版 8.1.3 发布,面向对象数据库
  13. 网站安全检测:8款非常有用的免费 Web 安全测试工具
  14. 微信开发:账号申请,AppID、AppSecret 获取方式
  15. python中英文时间转换
  16. (一百二十三)Android O 了解wifi eap中的anonymous identity
  17. 每日3词 2021-03-08 【reference】【print】【coding】
  18. Python 核心编程(第二版)——网络编程
  19. 机房收费系统—软件需求说明书
  20. 靶场复现————平行越权、垂直越权

热门文章

  1. 企业如何对付DDoS***
  2. Dev的多语言简单实现
  3. 【读书笔记】.NET本质论第四章-Programming with Type(Part Two)
  4. sphinx文档_使用Sphinx构建自定义文档工作流
  5. web字体设置成平方字体_探索免费和开放的Web字体
  6. efk使用_如何使用EFK创建开源堆栈
  7. 评选 cms_十大评选和编辑精选:12月评论
  8. 第二十九章:学校招生
  9. 提升财运必看!运势不好的原因,竟然和这些数字有关?(已有近10万人提升了财运)...
  10. CSS3 变换/变形(transform)