[问题] (int*)malloc(size(int))

楼主: baldhawk (哈哈)   2015-04-27 17:46:23
开发平台(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*)?
谢谢大家!
作者: ahwater01 (臭酸咖)   2015-04-27 17:52:00
转型 (void*) -> (int*)
楼主: baldhawk (哈哈)   2015-04-27 17:54:00
抱歉楼上大大 我很嫩 能说详细一点吗 thx
作者: Jockey66666 (往事已成追忆)   2015-04-27 17:56:00
void* malloc (size_t size);
楼主: baldhawk (哈哈)   2015-04-27 17:57:00
sorry 我真笨我还是不懂 >是说为啥要加个void*在前面呢?另外 一定要加(int*)吗?
作者: CaptainH (Cannon)   2015-04-27 18:02:00
C不用 C++要
作者: bigpigbigpig (To littlepig with love)   2015-04-27 18:06:00
malloc 只传回通用指标,必须自行强制转型成 int*
楼主: baldhawk (哈哈)   2015-04-27 18:07:00
通用指标?原来还有这个东西?好奇这个跟其他指标不同在?为什么C++一定要呢?这有什么原理可循吗?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-04-27 18:20:00
通用指标就是void * 现在先背起来 等你长大就懂了
作者: Debians   2015-04-27 19:25:00
语言本身就是这样设计的啊~长大就懂了是啥XD
作者: azureblaze (AzureBlaze)   2015-04-27 19:40:00
与其说通用,不如说"不明"因为要把指向不知是什么的指标转成指向int所以编译器要求用强制转型来确认你知道你在做什么
楼主: baldhawk (哈哈)   2015-04-27 20:17:00
谢谢楼上前辈们的解说 我很担心我问题太多太烦人了:p
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-04-27 21:38:00
有的问题真的是学到后面才会懂 在那之前怎么解释也很难讲清楚 而且往往听过就忘 因为配合的知识还没学到所以先记得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*类型,要聪明的我们自己转成我们要的类型,否则与我们自己宣告的指标变量类型不匹配

Links booklink

Contact Us: admin [ a t ] ucptt.com