大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先举个例子:某用户需要一个将任意多个整数按大小排序的程序。(在计算机文件夹中,当文件很多时经常用到排序)
创新互联建站2013年至今,先为沁阳等服务建站,沁阳等地企业,进行企业商务咨询服务。为沁阳企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
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;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要多练、多思,不怕麻烦。不知道您学了递归没有?有个经典的“汉诺塔”问题,那家伙——得整死人啊!到现在我还一知半解的……
希望我的回答对您有帮助!
假设定义一个整型二维数组(M*N):int (*p)[N] = new int[M][N];
作为函数形参的形式为:TYPENAME func(int p[][N], int size)//size = M
在函数定义中就像使用二维数组一样使用p。
C语言可以通过宏,在你需要的位置宏展开出一个新的函数。
例如:
#define XXX(funcname) \
int funcname (int arg1, int arg2) \
{ return arg1 + arg2; }
但这也是编译期就决定好了的,也不能实现运行期动态创建。
动态内存分配即分配内存大小在运行时才确定,一般在堆中分配。
C语言动态内存分配相关的函数如下几个:malloc、calloc、realloc、free;
malloc函数的使用比较直接,一个成功的malloc调用返回分配的size大小的内存的指针。失败时返回NULL并将错误代码置为ENOMEM。
calloc函数可以分配nr个size大小的内存空间,一般用于一组struct结构体的分配。
realloc函数将ptr指向的内存空间重新分配大小为size并返回新的内存首地址。
free函数释放前三个函数申请的内存空间,所以,使用前三个分配函数分配的内存一定要free掉。