动态内存(二)calloc 和 realloc && 使用动态内存
来源:互联网 发布:做个文明中国人 知乎 编辑:程序博客网 时间:2024/05/16 16:23
Pointers or C 英文版翻译
11.3 Calloc and Realloc
另外还有两个内存分配函数,
calloc 和 realloc
,他们的原型如下:
void * calloc(size_t num_elements,size_t element_size);void * realloc(void* ptr,size_t new_size);
calloc 也是用来分配内存的。malloc 和 calloc 的主要区别是,后者在返回指向分配的内存的指针前将内存初始化为0。这初始化是很方便的 ,但是如果你的程序首先做的事是在数组中存入值,那么使用calloc 是很浪费时间的。calloc 和 malloc 的较小的不同是请求内存数量的方式不同。calloc 获取 所需的元素的数量和每个元素的字节数。通过这些值来计算需要多少字节。
realloc 被用来修改之前被分配的内存的大小。你可以用这个函数使内存块扩大或者缩小。如果扩大一块内存,那么它旧的内存的内容不会改变,然后新加的内存添加在之前内存的末尾。新内存是没有经过任何初始化的。如果内存块被划分的很小,那么内存被截断,先前剩余的部分不会被改变。
如果原先的内存大小不能被调整,realloc 将分配一个正确大小的内存,并且把就内存中的内容拷贝到新的内存中。因此,在调用realloc 后一定不要再使用指向内存块的旧指针。使用新的指针代替旧的它。
最后,如果realloc 的第一个参数为NULL,那么它的行为很像malloc 。
11.4 Using Dynamically Allocated Memory
11.4 使用动态分配的内存
这儿是一个通过 malloc 获取一块内存的栗子。
int * pi;pi=malloc(100);if(pi!=NULL){ printf("out of menory !\n"); exit(1);}
NULL符号作为字面常量0 被定义在 stdio.h 中。它被用来在视觉上提醒被测试的是指针类型,而不是整型。
如果这些内存是可用的,我们将有一个指向100个字节的指针。在一个int类型是4个字节的机器上,这块内存将被看作25个int类型的数组,因为pi 是一个int 型指针。
提示:
如果你的目的是为了获得足够储存25个整型的内存,这儿有一个更好的方法获取它。
pi= malloc(25* sizeof(int));
这种方法更好一些,因为它是可移植的。它在不同大小的int型机器上可以很好的工作。
现在你有了指针,那么如何使用内存呢?当然,你可以使用解引用,并且使用指针算术存取这个数组中不同位置的整数,例如在一个循环中,把新分配的数组的每一个元素设置为0:
int * pi2,i;pi2 =pi;for(i=0;i<25;i++){ *pi2++ =0;}
正如你看到的,你一样可以对一个指针使用下标。这个第二个循环和之前哪一个工作一样。
int i;for(i=0;i<25;i++){ pi[i]=0;}
译者:小风code
时间:2017-11-11
- 动态内存(二)calloc 和 realloc && 使用动态内存
- 动态内存开辟(malloc calloc realloc)
- 动态内存分配函数malloc、calloc和realloc
- 动态内存分配函数malloc,calloc,realloc
- 动态内存开辟malloc,calloc,realloc简述
- C语言:动态内存malloc,calloc,realloc
- C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
- 动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
- 动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
- 动态内存分配(malloc、free、calloc、realloc)
- 动态内存分配(malloc、realloc、calloc函数)
- 动态内存管理(malloc、 free、 calloc、 realloc)
- C语言动态内存分配:(二)malloc/calloc/realloc/aligned_malloc
- C语言中动态内存分配 malloc realloc calloc 的使用和比较
- C动态内存分配:(三)malloc/calloc/realloc/free使用注意事项
- C动态内存分配:(三)malloc/calloc/realloc/free使用注意事项
- 动态内存管理总结(malloc、calloc、realloc的区别),以及内存泄漏常见问题
- C语言动态内存分配malloc/realloc/calloc
- Linux常用命令
- IDEA下WEB目录结构介绍
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor
- 小白成长日记(11)--选择排序之堆排序
- 【末世旅行之PHP】PHP用PDO连接MySQL数据库工具类-增删改查
- 动态内存(二)calloc 和 realloc && 使用动态内存
- Currency Exchange POJ
- mysql数据库安装:windows下安装MSI版
- 连接MySQL出现1045错误 解决方法
- linux安装mysql数据库遇到的问题
- Magento创建日志(log)
- 为什么c语言中赋值表达式左值和右值不能调换位置
- java基础
- leetcode编程记录12 #688 Knight Probability in Chessboard