C语言的(char *)malloc()这函数的用法,它前面的返回值的问题,越详细越好~~~

#include "stdio.h"
#include "malloc.h"
#define INTSIZE sizeof(int)
#define NODESIZE sizeof(int)+sizeof(char *)
#define ERROR {printf("error\n");return(0);}
main()
{int i;char *first=NULL,*p=NULL,*q=NULL;
if(((int *)p=(int *)malloc(NODESIZE))==NULL)ERROR
for(i=2;i<10;i++,p+=INTSIZE)
if(((int *)q=(int *)malloc(NODESIZE))==NULL)ERROR
else {*(char**)p=q;p=q;*(int *)p=i;}
*(int *)p='\0';
for(p=first;p;p+=INTSIZE,p=*(char **)p)
printf("%d ",*(int *)p);
}
关于这个程序中的malloc的用法由其它的返回值我有点迷糊,还有把p强制说明成一个二级指针的问题,我也不是很理解,讲的能越详细越好~~~谢谢各位了~~~

第1个回答  2010-09-13
void main()
{
int i,j, n = 0; //不说了,定义
char *color[20], str[10], *temp;//同上,但是注意*color[20]定义的是指针数组,也就是说color[n]里面装的是指针。

scanf("%s", str);//输入
while(str[0] != '#')
{
color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1));//创建一个长度为strlen(str)+1的一个数组(或者说是栈)数组第一个元素的地址给了color[n]具体元素可以用color[n][0],color[n][1]...来表示
strcpy(color[n], str);//把字符串str[20]里的元素复制到刚才创建的数组里
n++;
scanf("%s", str);
}

for(i = 0; i < n; i++)
printf("%s ", color[i]);//打出color[n]数组共n个
printf("\n");
return 0;
}

这个程序实现的功能是输入n<20个字符串,每个字符串长度小于10如果输入"#"则表示输入结束,最后打出输入的字符串。

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
第2个回答  2010-09-17
兄弟没有那复杂
原型:extern void *malloc(unsigned int num_bytes);
malloc就是反回一块以字节为单位的内存,反回这块内存的首地址void型指针,把指它换一下类型就用,就这么简单。本回答被提问者和网友采纳
第3个回答  2010-09-13
"还有把p强制说明成一个二级指针的问题"
其实不是把p说明成一个二级指针,只是把p从char*强制转化为int*而已
malloc是申请指定大小的内存区域,并返回内存地址,因为返回的地址无类型,所以你要将它用作什么类型,一般就需要进行一次指针类型的强制转化,如果没有申请到内存,则返回NULL
第4个回答  2010-09-13

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网