malloc和calloc可以动态的分配内存,即:编译的时候不会分配内存运行的时候才会分配内存。很像高级语言中的new关键字。
创新互联坚信:善待客户,将会成为终身客户。我们能坚持多年,是因为我们一直可值得信赖。我们从不忽悠初访客户,我们用心做好本职工作,不忘初心,方得始终。10多年网站建设经验创新互联是成都老牌网站营销服务商,为您提供成都网站建设、成都网站制作、网站设计、H5页面制作、网站制作、成都品牌网站建设、微信平台小程序开发服务,给众多知名企业提供过好品质的建站服务。这样的好处自然是不用多说。现在对他们的用法及注意点进行总结:
先看malloc,代码如下:
#include <stdio.h> #include <stdlib.h> #define N 5 int main() { int i = 0; int * nums; nums = (int *)malloc(N*sizeof(int)); //其实nums相当与[]数组:一个int类型的数组 //为nums赋值 for(i=0 ; i < N ; i++) { printf("请输入第%d个数值:" , i +1); scanf("%d",(nums+i)); } for(i = 0 ; i < N ; i++) { printf("第%d个元素的值为 : %d\n" , i + 1 , *(nums + i)); } free(nums); nums = NULL; return 0; }
运行结果如下图:
现对malloc的解释如下:
1,malloc定义一个数组,数组类型需要使用强转指针,比如(int *)的意思就是:定义了一个int类型的数组,至于数组的长度即时在N*sizeof(int)中表现。N*sizeof(int)即为 5X4=20,既是在内存中动态的分配20个字节,而每个int类型占4个字节(sizeof(int)获得的 , 可能在其他的IDE中是不一样的)。其实用20/4就可以得到数组的长度为5了。
2,用完后需要手动free掉指针,这比单纯的使用数组的效率要高,但是存在一定的风险。
再看 calloc,代码如下:
#include <stdio.h> #include <stdlib.h> #define N 5 int main() { int i = 0; int * nums = NULL; nums = calloc(N,sizeof(int)); //为nums赋值 for(i=0 ; i < N ; i++) { printf("请输入第%d个数值:" , i +1); scanf("%d",(nums+i)); } for(i = 0 ; i < N ; i++) { printf("第%d个元素的值为 : %d\n" , i + 1 , *(nums + i)); } free(nums); nums = NULL; return 0; }
运行的结果和malloc的一样,就不再给图了。
事实上,calloc和malloc产生的想过是一样的,但是它们的用法上有些区别:
1,malloc需要强制转换,而calloc不需要强制转换
2,malloc和calloc的参数是不一样的:
①,malloc只有一个参数, 为数组的大小*数组类型所占的空间字节大小,为一个参数
②,calloc有2个参数, 1 : 数组的大小 ; 2 : 数组类型所占的空间字节大小。
现在提出一个注意点:
关于 free(nums) : 释放nums一定要注意,如果使用了nums++等让指针美誉指向数组的头(第一个元素),那么即使是使用了free,指针也不能被释放掉。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站题目:Cmalloc和calloc函数总结-创新互联
网站链接:/article36/igipg.html
成都网站建设公司_创新互联,为您提供网站策划、品牌网站建设、外贸建站、网页设计公司、网站收录、软件开发
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联