malloc()函数的类型(void *)的类型转换问题

1、用malloc函数申请空间:
例如:
int len = 100;

用int p = (int )malloc(len * sizeof(int))

或者:

int p = malloc(len sizeof(int))

请问int 必须加吗? 不加也可以运行程序的, 而且有时候连warnning 都没有啊, 那个Int是什么意思?
返回的不就是地址吗, 而P也是指针啊, 为什么我见好多地方都有强制类型转换的做法的

原型:
void *malloc(size_t size)
返回值是:已分配内存的首地址

2、那个void 和void*有哪位同学可以指点一下, 我觉得void本来就不需要返回类型, 那要那个void * 干嘛呀?

答:

C下,建议 int p = malloc(len sizeof(int))
C++下,建议 int p = (int )malloc(len * sizeof(int))
因为C++下有更严格的类型检查

C标准并不要求强制转换,在赋值时会将void *隐式转换成相应类型的指针。

对malloc的返回类型强制转换时传统C的习惯用法,因为传统C中malloc返回char *,隐式转换会产生警告

但为了保持C++兼容,还是需要返回类型强制转换的

答:

这个问题c与c++是不同的,c允许void*指针与普通指针互相赋值,但c++不允许void*指针赋予普通指针,必须经过强制转换才可以。

因此c中你可以直接int *p = malloc….,在语法上是没有问题的。但从一个良好的风格出发,使用强制转换可以利于代码日后向c++移植,否则,要进行不那么让人愉快的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值