有关calloc的使用
近来学了calloc,请问它在实际使用中怎么调用?例如分配一块内存空间用来存取10个双精度数,是不是在主函数中直接输入:void*calloc(10,4)????????麻烦结合实例跟我说说它的使用,谢谢! calloc malloc都是返回指针的:
void *指针是一种未定义指针 可以转换成任何类型的指针
main()
{
int *p;
p=(int *)malloc(sizeof(int));
}
alloc返回的是一块内存空间的首地址(实际上,用malloc也可以做到) 这我知道,课本是这样说的.但我想知道的是它的详细使用方法。能不能举多一些例子我看看,例子越详细越好。再次感谢! 楼上还没有学到数据结构吧?
数据结构中的动态链表就要用到了(在C++用new)。你搜索下,会有例子的。 举个简单的应用:
#include <stdio.h>
typedef struct student
{
charname;
int age;
floatmarks;
}stu;
main()
{
stu *p;
p=(stu *)malloc(sizeof(struct student));
scanf("%s",p->name);
fflush(stdin);
scanf("%d",&p->age);
fflush(stdin);
scnaf("%f",&p->marks);
......
}
感觉楼主是还没学好指针那部分内容 路过,顺便大声说下:"我讨厌指针!!!!!!" 楼上的师兄…… 不,没有指针,C语言还可以做什么? hello world! 似乎不可以,因为printf()这个函数也用到指针!
没去研究过C语言的可变参数. printf()
原型好像是:
int printf(const char *format,)
[ 本帖最后由 iptton 于 2006-6-18 10:37 编辑 ] 是不是一定在用结构体的时候才用到CALLOC,我平时这样想申请一块内存用来存某些数据不可以吗?为什么我见过的例子都会有结构体?不用结构体的例子有没有? 动态申请的好处是:避免浪费空间
一般在用静态方法声明变量时无法确定大小的变量 就要用动态申请
比如,一个学生管理系统里,用户要输入信息,但用户一次输入多少 是预先无法知道的
(没用过C做过大一点的东西,只知道这么多了…………高手补充……我也想具体知道点) 原型:extern void *malloc(unsigned int num_bytes);
用法:#include <alloc.h>
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
这样用也可以的:
char *p;
p=(char *)malloc(100);
当你有需要的时候,自然会慢慢理解的! 帮忙看看我这个程序,为什么得不到我想要的结果?我想申请一块空间用来存10个双精度数据,然后把这十个数据相乘,输出结果。但按我以下的程序结果系0。想了很久还想不通,希望高手们指点指点!^_^!
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(double)
void main()
{double*p;double a;int i;double amass;
p=(double*)calloc(10,LEN);
p=a;
for(i=0;i<10;i++)
scanf("%f",&a);
for(i=0;i<10;i++)
printf("%f\n",a);
amass=1 ;
for(i=9;i>0;i--)
amass=amass*a;
printf("%f",amass);
getch();
}
首先楼上可以参考下这段代码有错吗?(关于 scanf)
楼上申请了空间给p,然后又扔掉。
我改了scanf("%f")为scanf("%lf");在DEV-CPP下编译运行正常。 原帖由 powerwind 于 2006-6-19 00:38 发表
首先楼上可以参考下这段代码有错吗?(关于 scanf)
楼上申请了空间给p,然后又扔掉。
我改了scanf("%f")为scanf("%lf");在DEV-CPP下编译运行正常。
我按照你所说的在TC下面运行,是可以的,谢了。:victory:
但我还有点不明,你说我“申请了空间给p,然后又扔掉”是什么意思啊?由于我刚学calloc,还有很多不明白的地方,所以能不能详细地说说啊?我怎样才能实现我想要做的? 把数组a删除,用到a的地方改成p
删除这两句:
p=a;
double a;
其它用到a替换成p 为什么会这样?能不能说清楚啊? p=(double*)calloc(10,LEN); //在这里,给p分配了内存空间,p就指向了那块新的空间
p=a;//在这里,p又指向数组a,则p指向了数组a的那块空间,原来的那块没用了
如果楼上还是不明,可先对指针进行进一步学习,然后慢慢理解。