作者baldhawk (哈哈)
看板C_and_CPP
標題[問題] (int*)malloc(size(int))
時間Mon Apr 27 17:46:23 2015
開發平台(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*)?
謝謝大家!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.25.115.102
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1430127985.A.4B8.html
→ ahwater01: 轉型 (void*) -> (int*) 04/27 17:52
→ baldhawk: 抱歉樓上大大 我很嫩 能說詳細一點嗎 thx 04/27 17:54
→ Jockey66666: void* malloc (size_t size); 04/27 17:56
→ baldhawk: sorry 我真笨我還是不懂 > 04/27 17:57
→ baldhawk: 是說為啥要加個void*在前面呢? 04/27 17:58
→ baldhawk: 另外 一定要加(int*)嗎? 04/27 17:58
推 CaptainH: C不用 C++要 04/27 18:02
→ bigpigbigpig: malloc 只傳回通用指標,必須自行強制轉型成 int* 04/27 18:06
→ baldhawk: 通用指標?原來還有這個東西?好奇這個跟其他指標不同在? 04/27 18:07
→ baldhawk: 為什麼C++一定要呢?這有甚麼原理可循嗎? 04/27 18:08
→ MOONRAKER: 通用指標就是void * 現在先背起來 等你長大就懂了 04/27 18:20
推 Debians: 語言本身就是這樣設計的啊~ 04/27 19:25
→ Debians: 長大就懂了是啥XD 04/27 19:25
→ azureblaze: 與其說通用,不如說"不明" 04/27 19:40
→ azureblaze: 因為要把指向不知是什麼的指標轉成指向int 04/27 19:41
→ azureblaze: 所以編譯器要求用強制轉型來確認你知道你在做什麼 04/27 19:41
→ baldhawk: 謝謝樓上前輩們的解說 我很擔心我問題太多太煩人了:p 04/27 20:17
→ MOONRAKER: 有的問題真的是學到後面才會懂 在那之前怎麼解釋也很難 04/27 21:38
→ MOONRAKER: 講清楚 而且往往聽過就忘 因為配合的知識還沒學到 04/27 21:39
→ MOONRAKER: 所以先記得malloc()的結果一定要轉型才能安全使用 04/27 21:46
→ MOONRAKER: 這樣就好了 其他東東太複雜或太tricky以後再學 04/27 21:49
→ baldhawk: 謝謝大家不厭其煩的解說 謝謝!! 04/28 00:51
→ bigpigbigpig: 補充:通用指標不能直接dereference,故需要強制轉型 05/01 12:05
推 overhead: 因為malloc很笨,只會回傳void*類型,要聰明的我們自己 05/07 22:21
→ overhead: 轉成我們要的類型,否則與我們自己宣告的指標變數類型 05/07 22:21
→ overhead: 不匹配 05/07 22:21