有关c语言中malloc函数的问题
范例1char*str;str=(char*)malloc(100);if(str==NULL){printf("Notenoughmemorytoallocatbuff...
范例1
char *str ;
str =(char *)malloc (100);
if (str == NULL )
{
printf("Not enough memory to allocat buffer\n ");
exit (1);
}
范例2
char *ptr ;
ptr = malloc (35*sizeof (char ));
if (ptr == NULL )
{
puts ("Memory allocation error .");
return 1;
}
这是教科书上的两个范例,差不多啊!为什么一个malloc函数之前有强制转换,一个却没有 ? 展开
char *str ;
str =(char *)malloc (100);
if (str == NULL )
{
printf("Not enough memory to allocat buffer\n ");
exit (1);
}
范例2
char *ptr ;
ptr = malloc (35*sizeof (char ));
if (ptr == NULL )
{
puts ("Memory allocation error .");
return 1;
}
这是教科书上的两个范例,差不多啊!为什么一个malloc函数之前有强制转换,一个却没有 ? 展开
3个回答
展开全部
malloc函数返回指向被分配内存的指针。范例1把返回的这个指针的值又赋给了一个字符串指针,尽管值不变,但类型不同,中间可以用强制转换;范例2则直接赋值,原因是这两个类型的宽度相同,不用强制转换也不会出错。
作为编号习惯,范例1更清晰一些,不会因为不小心出错。但范例2运行起来也没问题。
作为编号习惯,范例1更清晰一些,不会因为不小心出错。但范例2运行起来也没问题。
更多追问追答
追问
虽然我不知道什么是宽度,但我还是觉的你说的在理。http://blog.csdn.net/waterwalk/archive/2008/05/28/2490293.aspx
这是我在csdn论坛上找到的一个贴子,你看他说的在理吗?
追答
你找到的贴子说的也有道理,但更多的是从编译器的角度来考虑。而我和一些经常用c的同事都觉得写强制转换更清晰一些:一来自己写强制转换的时候,必须要考虑清楚等号两边的指针类型;再就是别人看的时候省力,知道这儿有一个不同类型间的转换。
我说的“两个类型的宽度相同”,意思是void类型指针和char类型指针实际占用的内存大小都相同,所以只要编译器不警告,运行起来不会有错。
展开全部
lz没发现,两个指针 都是指向char型变量么?
如果是char型的话呢,问题不大,因为malloc返回的默认就是指向char型的,但是 如果是其他类型的指针变量就不一样了,需要强制转换,所以为了统一,还是加上强制转换的好
如果是char型的话呢,问题不大,因为malloc返回的默认就是指向char型的,但是 如果是其他类型的指针变量就不一样了,需要强制转换,所以为了统一,还是加上强制转换的好
追问
malloc不是默认返回void类型指针么吗?
追答
这个,本来是没错了啦
关于该函数的原型,在旧的版本中malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
引用自百度百科
http://baike.baidu.com/view/736228.htm
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是:
ptr = (char*)malloc (35*sizeof (char )); 这样格式才识标准的
ptr = (char*)malloc (35*sizeof (char )); 这样格式才识标准的
追问
http://blog.csdn.net/waterwalk/archive/2008/05/28/2490293.aspx
这是csdn论坛中的一个帖子,你看他说的在理吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询