
正文
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要多练、多思,不怕麻烦。不知道您学了递归没有?有个经典的“汉诺塔”问题,那家伙——得整死人啊!到现在我还一知半解的……
希望我的回答对您有帮助!
相关问答
Q1: 翻译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; //头指针,即链表第一个结构体的指针//
struct SStudent *temp,*end; //临时指针,尾指针,把p1,p2换为更有意义的词//
n=0;
temp=(struct Student *)malloc(LEN); //分配一个结构体内存,这里end或p2赋值无意义、没用处//
scanf("%ld %f",temp-num,temp-score); //获取学号、成绩//
head=NULL; //要注意,还没判断temp是不是有效的结构体,所以,head还是NULL!//
while(temp-num!=0) //如果temp是一个有效的结构体//
{n=n+1; //计数//
if(n==1)head=temp; //头指针,也是要返回的指针//
else end-next=temp; //把temp链接到链表的尾部//
end=temp; //有c语言中的动态函数了新的尾部,当然移动尾部指针到新尾部了//
temp=(struct Student *)malloc(LEN); //又分配内存//
scanf("%ld %f",temp-num,temp-score); //又进行学号、成绩输入,然后while()中判断……//
}
end-next=NULL; //尾部的“下一个”指针要确保为NULL,因为分配内存时没有初始化,可能是任意值哦!//
free(temp); //注意,原程序中没有这个,会导致内存泄露,因为总有一个结构体没有被添加到链表中//
return(head);
}
int main()
{struct Student *pt;
pt=creat(); //创建链表//
printf("\nnum:%ld\nscore:%5.1f\n",pt-num,pt-score); //把链表头输出,注意,如果链表长度为0,这会出错的!//
return 0;
}
//整个程序还算工整,局部地方,比如while()可以更优化点//
Q2: 可以说一下,C语言和C++中动态分配空间的函数有哪些,最好带解释;谢谢...
C 语言中 void *malloc(long NumBytes)c语言中的动态函数,只是分配一块指定大小c语言中的动态函数的内存空间c语言中的动态函数,对应的是使用free释放该空间。
C++ 分配动态内存的是new c语言中的动态函数, 释放空间为delete, new 与malloc的区别是new一个对象是会生成一个该对象实例的空间,同时会执行该类对象的构造函数c语言中的动态函数;而malloc只会分配空间不会执行构造函数。
Q3: 在C语言中,具有动态申请内存块功能的函数是?
给你介绍两个函数吧:
malloc函数 void * malloc(size) 动态内存分配函数,分配size字节的内存,返回的是指向该区域的指针
realloc函数 void * realloc(void * ptr ,size)重新分配内存,将ptr所指的已分配内存块的大小改为size,返回的也是指向该内存区域的指针
另外都包含在stdlib.h头文件中
楼主说的就是malloc函数了,这两个函数在数据结构中经常用到的
希望可以帮助你
Q4: C语言怎么动态创建函数?
C语言可以通过宏,在你需要的位置宏展开出一个新的函数。
例如:
#define XXX(funcname) \
int funcname (int arg1, int arg2) \
{ return arg1 + arg2; }
但这也是编译期就决定好了的,也不能实现运行期动态创建。
Q5: c语言中动态地址分配函数是什么呢?
函数原型:
void*
malloc(int
size);
参数:size
需要分配的内存大小。
返回值:申请到的内存地址(void*)。
说明:
如果返回NULL则说明申请失败。
c语言中的动态函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言中的动态函数是什么、c语言中的动态函数的信息别忘了在本站进行查找喔。








