[問題] 新手請教動態配置問題

看板C_and_CPP作者 (年輕ㄟ傲杯杯)時間15年前 (2009/03/03 11:37), 編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
請問各位板友 書在用指標配置動態空間時 會這樣寫 int *ptr=malloc(100*sizeof(int)); 但我看還有另一種寫法是 int *ptr=(int *)malloc(100*sizeof(int)); 請問多了這個(int *)到底差在哪裡? 書上是說 指標變數所指的型態 可是這兩種寫法跑出來的結果都一樣 所以不知道是否有不同的含意呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.71.22.41

03/03 11:40, , 1F
malloc原回傳型態是(void*), 加上(int*)代表強制作轉型
03/03 11:40, 1F

03/03 11:41, , 2F
不這麼作有的compiler好像會報warning, 另外個人覺得型
03/03 11:41, 2F

03/03 11:41, , 3F
態用明確轉型會讓你的code看起來比較清楚一些:)
03/03 11:41, 3F

03/03 11:50, , 4F
我是用DEV C 可以過 不過前面不是已經有宣告是int了嗎?
03/03 11:50, 4F

03/03 11:52, , 5F
還是說有沒有寫(int *)是差在手動跟自動嗎?
03/03 11:52, 5F

03/03 11:52, , 6F
重點是 malloc 這個函式的回傳型別
03/03 11:52, 6F

03/03 11:59, , 7F
所以說正統的寫法是要加(int *) 沒寫能過是因為編譯器?
03/03 11:59, 7F

03/03 12:04, , 8F
你寫 char c = 128; 編譯器也會讓你過啊,因為沒有發生錯誤
03/03 12:04, 8F

03/03 12:05, , 9F
可是會有警告,警告的意思就是有機會出現錯誤,現在無法判定
03/03 12:05, 9F

03/03 12:09, , 10F
另外可能是因為C++的規定比較嚴格,沒(int*)編譯成C++無法通過
03/03 12:09, 10F
文章代碼(AID): #19hANiOO (C_and_CPP)