请问一下在分配内存的时候,在malloc之前有没有(char *)具体有什么区别?

huyunkun 2003-12-05 12:49:22
如题:
char *str;
下面两条的意思区别是什么?仅仅是加了(char *)有了强制类型的作用吗?还是有什么其他的说法?
str =(char *)malloc(sizeof(char));
str =malloc(sizeof(char));
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huyunkun 2003-12-06
  • 打赏
  • 举报
回复
http://www.mhdn.net/p/2002-01-12/4281.html
可以参考一下在new和 malloc的比较的第二条,(char *)的作用是强制指针类型转化
Andy84920 2003-12-05
  • 打赏
  • 举报
回复
同意:

str++ 是往后移了几个字节是取决于str的定义的类型.而与malloc出的内存无关.

那不用强制转换有什么不一样呢?反正它会自动转换哪.
zhouqingyuan 2003-12-05
  • 打赏
  • 举报
回复
malloc分配出来的是void*类型的,所以要用具体的类型强制转换。
michaelli 2003-12-05
  • 打赏
  • 举报
回复
就是强制转换的作用
021850524 2003-12-05
  • 打赏
  • 举报
回复
str =malloc(sizeof(char));虽然会有一个编译期间的警告,但是不会出现"编译器将难以判定其数据对齐长度".str++ 是往后移了几个字节是取决于str的定义的类型.而与malloc出的内存无关.
但还是应该用第一个方法写.
claider 2003-12-05
  • 打赏
  • 举报
回复
谭浩强的c语言书上好像有。大致就是楼上诸位说的。
SCUM 2003-12-05
  • 打赏
  • 举报
回复
通常情况下
下面那句会引发编译器的一个警告

分配出的内存其实没什么不同
但如果不指明分到的内存的引用类型
则在以后涉及使用str的时
编译器将难以判定其数据对齐长度
简单点说:
比如以后用了 str++
强制转换为char *后编译器就明确地知道 str++ 是往后移了一个字节(byte)
如果不理会警告而强制产生代码
则根据str的实际使用情况会产生不确定的结果以至不恰当的内存存取
在标准C/C++中
涉及动态分配内存的时候
最好还是使用强制转换







24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧