c语言中的动态函数 c语言中的动态函数是什么

C语言中动态内存分配函数的用法及作用?(比如malloc,calloc,realloc等)先举个例子:某用户需要一个将任意多个整数按大小排序的程序 。(在计算机文件夹中c语言中的动态函数,当文件很多时经常用到排序)
1 。若不用动态分配内存 , 那就定义一个超大的数组吧!问题是,如果用户不需要那么大,不就浪费了?如果定义的数组还不够大,不就不能满足需求了?
2 。如果用动态分配 , 就解决上述问题了 。当c语言中的动态函数你需要多大内存时 , 就给你多大——如果有的话——这就是动态分配的意义 。
现在看上述问题的代码,我调试过的:
----------------------------------------------------------------------
#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;in;i++)
scanf("%d",p+i);/* 利用指针移位的方法赋值 */
for(i=1;in;i++)/* 冒泡排序法 */
{
for(j=0;jn-i;j++)
if(*(p+j)*(p+j+1))
{
m=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=m;
}
}
printf("将这些整数从小到大排列输出为:");
for(i=0;in;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语言动态链表函数#include stdio.h//头文件c语言中的动态函数,没什么好说的//
#include stdlib.h
#define LEN sizeof(struct Student)//结构体长度//
struct Student
{long num;//学号//
float score;//分数//
struct Student *next; //下一个学生//
};
int n; //链表长度,可以仅作为局部变量,但这里定义为全局变量也无所谓//
struct Student *creat(void) //创建链表函数//
{struct Student *head; //头指针,即链表第一个结构体的指针//

推荐阅读