看板 C_and_CPP 關於我們 聯絡資訊
請問第三行的(int*)是什麼意思?(int*)和(vptr)的順序是? int var = 10; void *vptr = &var ; int *iptr = (int*)(vptr); -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.235.58.180 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1402912368.A.6FA.html
IhateOGC:printf("0x%x\n",vptr); 06/16 18:45
IhateOGC:printf("0x%x\n",ptr); 06/16 18:46
IhateOGC:int *vptr; vptr = &var; google: pointer 06/16 18:51
CaptainH:意思是把 vptr 從 void* 強制轉型成 int* 06/16 18:54
pujols05:請問()這個是一定要加的嗎? 06/16 20:38
LPH66:哪一個()? C 是規定第一個要加, 第二個沒什麼疑義的話可免 06/16 20:43
LPH66:C++ 則是加任一個即可, 但只加後面的嚴格說來並不是轉型運算 06/16 20:44
LPH66:也就是說如果真的想表達轉型的話就是第一個()加上去就對了 06/16 20:44
LPH66:第二個 () 純粹只是用來表示誰拿來轉型 06/16 20:45
steve1012:C++ 用static_cast<>會不會比較好呢 06/16 21:50
diabloevagto:static_cast 跟 c 語法的強制轉形是一樣的,不檢查的 06/16 22:52
littleshan:static_cast絕不等於C式轉型,他會在compile time檢查 06/16 23:03
Killercat:這其實是一個很典型的「拿void*去裝任何東西」的寫法 06/16 23:17
Killercat:C就算了 C++請完全避免這種行為 06/16 23:17
Killercat:另外C式轉型 像是這個 其實很大一部份都是reinterpret 06/16 23:18
Killercat:reinterpret_cast就是「完全不檢查」的轉法 請絕對避免 06/16 23:18
Killercat:在C++裡面出現這種行為 06/16 23:18
azureblaze:lib用void* userdata附加lib不需要知道的資料很正常吧 06/16 23:29
diabloevagto:請問static_cast 在 compiler 檢查什麼? 06/17 02:29
LPH66:檢查多形之類的吧, C++ 要檢查的東西可多了 06/17 08:46
Jockey66666:多型是run-time的事情 static_cast無法檢查.. 06/17 10:18
Jockey66666:static_cast不能在指標與非指標間轉換ex: int to int* 06/17 10:20
Jockey66666:比較常遇到不能轉的例子還有const和non-const 06/17 10:27
azureblaze:staic_cast會把完全不合理的轉換擋掉 06/17 10:28
azureblaze:像是完全不相干的兩個class指標 06/17 10:29
Jockey66666:完全不相干的兩個class沒有方法直接轉吧 用()也一樣.. 06/17 10:37
Jockey66666:基本型別例外 06/17 10:37
azureblaze:http://ideone.com/m4LQMJ 可reinterpret_cast 06/17 10:59
azureblaze:C Style Cast的含意太多了所以c++才把他分開 06/17 10:59
Jockey66666:我誤解了你的意思 sry 06/17 11:01
Killercat:C很常見是因為無奈 xd C++除了塞thread資料以及相容舊 06/17 11:06
Killercat:C Libs以外 實在沒有什麼理由去塞void* 06/17 11:06
Killercat:況且現在有std::thread了 更該避免這種行為 06/17 11:08
Killercat:我是認為 在僅使用四大轉型的前提下,只要用到dynamic 06/17 11:09
Killercat:就代表這code設計有改進空間 用到const cast代表這code 06/17 11:09
Killercat:需要嚴格再檢視 至於出現reinterpret...大概八成是哪裡 06/17 11:10
Killercat:作錯了才需要這樣轉 06/17 11:10
pujols05:所以是因為強制轉型的關係int* 要變成(int *)這個意思嗎? 06/18 17:08
LPH66:強制轉型的語法就是型別括起來放前面 06/19 01:41