我一直無法找到答案。我在 C 中使用這些方法中的哪一個重要嗎?
int get_int(void *vptr) {
return *(int *)vptr;
}
或者
int get_int(void *vptr) {
int i = 0;
memcpy(&i, vptr, sizeof(int));
return i;
}
它似乎在我的測驗中給出了相同的結果,但在每種情況下都是等價的嗎?
uj5u.com熱心網友回復:
主要區別在于 memcpy 將在更多情況下作業——它只需要從中復制的記憶體包含適當型別的資料。強制轉換和取消參考要求并且還要求指標對訪問該型別有效。在大多數機器上,這(只是)需要正確對齊。強制轉換還允許編譯器假定它不使用不同型別的值作為別名。
最終結果是 memcpy 可能“更安全”,但也可能更貴一些。
uj5u.com熱心網友回復:
但這在每種情況下都是等價的嗎?
不。
*(int *)vptr依賴int對齊。如果vptr不指向int分配的資料,則結果為UB。
memcpy()沒有比要求。只要資料不是陷阱(罕見),它就“有效”。
uj5u.com熱心網友回復:
不,它不是等價的,因為不管你信不信,并非所有指標在所有情況下都是相同的(盡管在 x86 架構上它們是相同的)。
然而,演員表將在它被定義的地方作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335631.html
上一篇:洗掉出現的“The”和“the”
下一篇:為什么換行符不列印?
