开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
C
问题(Question):
小弟有个笨问题困扰小弟许久 上网跟看书都不解 特请教版上前辈
我看到一行程式 int *ptr = (int*)malloc(sizeof(int));
我的疑惑是
我知道启动指标可以
int a;
int *ptr = &a;
而 malloc(sizeof(int)) 本身的意思就是从heap中配置一int内存,并回传
此内存address,因此,根据上面启动指标,应该写成
int *ptr = malloc(sizeof(int)) ? 为啥我看到的还多了(int*)?
谢谢大家!
楼主: baldhawk (哈哈) 2015-04-27 17:54:00
抱歉楼上大大 我很嫩 能说详细一点吗 thx
void* malloc (size_t size);
楼主: baldhawk (哈哈) 2015-04-27 17:57:00
sorry 我真笨我还是不懂 >是说为啥要加个void*在前面呢?另外 一定要加(int*)吗?
作者:
CaptainH (Cannon)
2015-04-27 18:02:00C不用 C++要
作者:
bigpigbigpig (To littlepig with love)
2015-04-27 18:06:00malloc 只传回通用指标,必须自行强制转型成 int*
楼主: baldhawk (哈哈) 2015-04-27 18:07:00
通用指标?原来还有这个东西?好奇这个跟其他指标不同在?为什么C++一定要呢?这有什么原理可循吗?
通用指标就是void * 现在先背起来 等你长大就懂了
作者: Debians 2015-04-27 19:25:00
语言本身就是这样设计的啊~长大就懂了是啥XD
与其说通用,不如说"不明"因为要把指向不知是什么的指标转成指向int所以编译器要求用强制转型来确认你知道你在做什么
楼主: baldhawk (哈哈) 2015-04-27 20:17:00
谢谢楼上前辈们的解说 我很担心我问题太多太烦人了:p
有的问题真的是学到后面才会懂 在那之前怎么解释也很难讲清楚 而且往往听过就忘 因为配合的知识还没学到所以先记得malloc()的结果一定要转型才能安全使用这样就好了 其他东东太复杂或太tricky以后再学
楼主: baldhawk (哈哈) 2015-04-28 00:51:00
谢谢大家不厌其烦的解说 谢谢!!
作者:
bigpigbigpig (To littlepig with love)
2015-05-01 12:05:00补充:通用指标不能直接dereference,故需要强制转型
作者:
overhead (overhead)
2015-05-07 22:21:00因为malloc很笨,只会回传void*类型,要聪明的我们自己转成我们要的类型,否则与我们自己宣告的指标变量类型不匹配