您的位置:首页 > 其它

malloc函数和void *

2009-07-30 16:58 197 查看
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++移植,否则,要进行不那么让人愉快的修改。

问题网址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: