RE-MAIN

RE-MAIN更新至01集

Relying on Heaven to Slaughter Dragons

  • 上村祐翔 西山宏太朗 木村昴 Lynn 
  • 西田征史 

    更新至01集

  • 动画 运动 日本动漫 

    日本 

    日语 

  • 2021 

C语言中动态内存分配函数的用法及作用?(比如malloc,calloc,realloc等)

先举个例子:某用户需要一个将任意多个整数按大小排序的程序。(在计算机文件夹中,当文件很多时经常用到排序)1。若不用动态分配内存,那就定义一个超大的数组吧!问题是,如果用户不需要那么大,不就浪费了?如果定义的数组还不够大,不就不能满足需求了?2。如果用动态分配,就解决上述问题了。当你需要多大内存时,就给你多大——如果有的话——这就是动态分配的意义。 现在看上述问题的代码,我调试过的:----------------------------------------------------------------------#include <stdio.h>#include <stdlib.h> /* calloc、exit需要声明头文件 */void main(){ int n,*p,i,j,m; printf("本程序可对任意个整数排序;\n"); printf("请输入整数的总个数: "); scanf("%d",&n); p=(int *)calloc(n,sizeof(int)); /* calloc函数的使用 */ if(p==0) { printf("分配失败!\n"); exit(1); /* 当分配失败时,exit可以终止程序 */ } printf("请输入这些整数:\n"); for(i=0;i<n;i++) scanf("%d",p+i); /* 利用指针移位的方法赋值 */ for(i=1;i<n;i++) /* 冒泡排序法 */ { for(j=0;j<n-i;j++) if(*(p+j)>*(p+j+1)) { m=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=m; } } printf("将这些整数从小到大排列输出为:"); for(i=0;i<n;i++) { if(i%5==0) printf("\n"); /* 每隔5个数换行 */ printf(" %11d;",*(p+i)); /* 为了整齐,每个数占11个字符,当数字很多时这很重要 */ } printf("\n"); free(p); /* 释放空间 */}---------------------------------------------------------------------- 调用calloc函数时,calloc(n,sizeof(int))表示请求n个连续的、每个长度为整型的空间,若成功返回这些空间的首地址。(int *)表示将这个地址放在指针中。到此为止,就可以用指针来对分配到的空间操作了。注意,最后一定要用free函数释放申请到的空间,否则这部分空间会一直占着。 malloc、calloc、realloc的用法(以上述问题为例)及区别: 1。malloc(n*sizeof(int)) /* 请求n个连续的、每个长度为整型的空间,若成功返回这些空间的首地址,失败返回0 */ 2。calloc(n,sizeof(int)) /* 请求n个连续的、每个长度为整型的空间,若成功返回这些空间的首地址并将每个空间赋值为0,失败返回0 */ 3。realloc(p,sizeof(int)*n) /* 给一个已经分配了地址的指针重新分配空间,参数p为原有的空间地址,sizeof(int)*n是重新申请的地址长度,用于分配不足的时候。个人觉得没用——不够就找到原分配处改大一点不就行了?! */ 我能说得只有这些了,有些东西看起来麻烦,当你小试一下就会发现,不过如此嘛!学C要多练、多思,不怕麻烦。不知道您学了递归没有?有个经典的“汉诺塔”问题,那家伙——得整死人啊!到现在我还一知半解的…… 希望我的回答对您有帮助!



C语言中re是什么意思

C中没有专门的什么re补充:就是一个变量定义,没有专门的意义 中国物联网校企联盟技术部