到目前為止,我總是訪問一個指向結構陣列的指標,因此:
struct blah *ptr; ptr[10].member = 1;
我最近意識到另一種方式:
struct blah (*array_ptr)[]; (*array_ptr)[10].member = 1;
我發現的唯一限制是它禁止array->member訪問強制 [] 使用。
問題:對于 a) 人類或 b) 兩種方法之間的編譯器,顯式 [] 方法是否有任何優點/缺點?
對于人類來說,我想它明確表明指標指向一個陣列,而不是“正常”使用它是模棱兩可的。
uj5u.com熱心網友回復:
到目前為止,我總是訪問一個指向結構陣列的指標,因此:
struct blah *ptr; ptr[10].member = 1;
這演示了指向結構的指標(恰好是至少 11 個此類結構的陣列的元素),而不是指向結構陣列的指標。然而,它是一個陣列struct blah將衰減到的指標型別。
我最近意識到另一種方式:
struct blah (*array_ptr)[]; (*array_ptr)[10].member = 1;
那是指向 [未指定數量] 結構的陣列的指標。
這兩個指標指向的地址可能相同,但指標的型別不同。
我發現的唯一限制是它禁止
array->member訪問強制 [] 使用。
struct blah您可以使用任一形式間接訪問物件。是的,由于指標型別不同,這兩種情況的語法不同。
問題:對于 a) 人類或 b) 兩種方法之間的編譯器,顯式 [] 方法是否有任何優點/缺點?
我敢說大多數人發現結構指標變體比陣列指標版本更容易閱讀和理解。它應該對編譯器沒有任何影響,因為如果array_ptr指向第一個元素為 的陣列*ptr,并且該陣列確實至少有 11 個元素,那么這兩個示例賦值是 100% 等效的。
對于人類來說,我想它明確表明指標指向一個陣列,而不是“正常”使用它是模棱兩可的。
指標總是可以被認為指向一個陣列,盡管它可能是一個長度為 1 的陣列。嘗試區分并沒有特別的用處,至少不是通過改變指標的型別。當您有指向已知長度的陣列的指標(例如:)時,它會變得更有趣和更有用struct blah (*array11_ptr)[11];,但我沒有看到您的未指定長度版本的很多用例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462776.html
上一篇:使用ggplot2反轉輔助y軸圖
