[問題] (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