malloc是memory allocate的缩写,那calloc的全拼是什么?
既然void *malloc(unsigned int size),为什么void类型能返回地址,void 不是无返回值吗?
calloc也是这样的问题,求高手解答
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

C语言中内存分配的问题
收起
- 写回答
- 好问题 0 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
关注
void指针是什么?
void指针一般被称为通用指针或泛指针,它是C关于“纯粹地址(raw address)”的一种约定。void指针指向某个对象,但该对象不属于任何类型。请看下例:
int *ip;
void *p;
在上例中,ip指向一个整型值,而p指向的对象不属于任何类型。
在C中,任何时候你都可以用其它类型的指针来代替void指针(在C++中同样可以),或者用void指针来代替其它类型的指针(在C++中需要进行强制转换),并且不需要进行强制转换。例如,你可以把char *类型的指针传递给需要void指针的函数。什么时候使用void指针?
当进行纯粹的内存操作时,或者传递一个指向未定类型的指针时,可以使用void指针。void指针也常常用作函数指针。有些C代码只进行纯粹的内存操作。在较早版本的C中,这一点是通过字符指针(char *)实现的,但是这容易产生混淆,因为人们不容易判断一个字符指针究竟是指向一个字符串,还是指向一个字符数组,或者仅仅是指向内存中的某个地址。
例如,strcpy()函数将一个字符串拷贝到另一个字符串中,strncpy()函数将一个字符串中的部分内容拷贝到另一个字符串中:
char *strepy(char'strl,const char *str2);
char *strncpy(char *strl,const char *str2,size_t n);
memcpy()函数将内存中的数据从一个位置拷贝到另一个位置:
void *memcpy(void *addrl,void *addr2,size_t n);memcpy()函数使用了void指针,以说明该函数只进行纯粹的内存拷贝,包括NULL字符(零字节)在内的任何内容都将被拷贝。请看下例: #include "thingie.h" /* defines struct thingie */ struct thingie *p_src,*p_dest; /* ... */ memcpy(p_dest,p_src,sizeof(struct thingie) * numThingies);
在上例中,memcpy()函数要拷贝的是存放在structthingie结构体中的某种对象op_dest和p_src都是指向structthingie结构体的指针,memcpy()函数将把从p_src指向的位置开始的sizeof(stuctthingie) *numThingies个字节的内容拷贝到从p_dest指向的位置开始的一块内存区域中。对memcpy()函数来说,p_dest和p_src都仅仅是指向内存中的某个地址的指针。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容

- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
- 2021-09-07 08:45回答 3 已采纳 有帮助望采纳 #include <stdio.h> // #include <math.h> #include <memory.h> int main() {
- 2022-03-05 23:14回答 1 已采纳 参数用二级指针
- 2019-07-15 13:49回答 2 已采纳 函数指针是指向函数指令的入口地址的指针,指令位于代码区。 函数的参数放在数据区的堆栈上。 好比一个是你的课本,上面有题目 一个是你的作业本,你在上面写作业 根本是两个东西。 还有一个是将
- 2020-09-03 02:32本篇文章将深入探讨C语言中的内存分配问题,特别是关注内存泄漏以及如何使用malloc和指针来管理内存。 首先,C语言中的内存分为几个不同的区域: 1. **程序代码区**:存储函数体的二进制代码。 2. **全局数据区**...
- 2017-02-14 23:09回答 3 已采纳 首先我觉得你的返回值和函数锁定的返回值类型就不一致,定义的是返回结构体,实际上返回的是结构体指针;其次对于你的问题,malloc锁所申请的内存空间是堆空间,这部分的内存是需要程序员手动申请并且手动释放
- 2017-01-30 19:59回答 2 已采纳 理论上10应该是常量分配在常量区,但是实际上没有任何编译器傻到这么做,因为不必要,int等简单类型可以直接装入寄存器,没必要再在常量区存它的一个副本。
- 2021-01-08 13:29回答 7 已采纳 对于第二个问题可以分为两个子问题来回答。 1) 可以用sizeof获取数组大小吗? 可以也不可以。数组本质上只是连续存储空间在内存中起始点的标识,C语言中数组是可以获取大小的,但数组可以隐式退化为
- 2021-01-19 22:53C语言 动态内存分配详解 动态内存分配涉及到堆栈的概念:堆栈是两种数据结构。堆栈都是数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 栈(操作系统):由操作系统自动分配释放 ,...
- 2023-02-26 03:38回答 2 已采纳 可以这样被结构体指针接收,但因为没分配内存空间,指针无法访问结构体的数据。这就是CreatTree函数要做的事情,需要给这个结构体指针动态分配内存空间
- 2018-04-29 01:40回答 4 已采纳 如果要细致分析你程序的表现,你目前提供的信息不够,要贴上完整的程序,才能找到写入数据的区域怎样被更新了.
- 2022-08-07 13:00回答 3 已采纳 供参考:https://blog.csdn.net/Ye_Ming_OUC/article/details/123441066
- 2020-12-31 00:51C语言动态内存分配的详解 1.为什么使用动态内存分配 数组在使用的时候可能造成内存浪费,使用动态内存分配可以解决这个问题。 2. malloc和free C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和...
- 2024-03-25 07:11GOATLong的博客 动态内存分配易出现的问题 1.对NULL指针的解引⽤操作 编辑 2.对动态开辟空间的越界访问 3.对⾮动态开辟内存使⽤free释放 4.使⽤free释放⼀块动态开辟内存的⼀部分 5.对同⼀块动态内存多次释放 6.动态开辟内存忘记...
- 2024-08-23 00:11c语言指针实现动态分配和释放内存
- 2022-07-29 03:54大山很山的博客 内存分配方式及相关函数使用说明。静态存储区分配、动态内存分配、从栈上创建
- 没有解决我的问题, 去提问
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司