[英]Shall a pointer past the end of the last array element compare equal to a pointer past the end of the whole array?
[英]Shall a pointer to an array compare equal to a pointer to its first element?
假設我有一個數組int x[10];
在我的C ++抽象機實現中,指向數組的指針並不等於指向其“第一個”元素的指針(應用於x
的數組到指針轉換的結果),而是等於等於“最后一個”的指針“元素x[9]
。 即(void*)x == (void*)&x
為false
和(void*)&x[9] == (void*)&x
為true
。
這樣的實現會符合要求嗎? 我唯一知道它“違反”的是[basic.compound] / 4中的非規范性注釋:
[注意:即使數組對象及其第一個元素具有相同的地址,也不能指針可互換。 —尾注]
參見[basic.compound(6.9.2)] / 3:
指向對象的指針的指針類型的值表示該對象占用的內存中第一個字節的地址。
由於x[0]
是數組的第一個元素(並且指定數組沒有初始填充),因此x
的第一個字節必須與x[0]
的第一個字節相同。
在[conv.ptr] / 2中說:
可以將類型為“ pointer to cv T”的prvalue轉換為類型為“ pointer to cv void”的prvalue,其中T是對象類型。 通過此轉換,指針值(6.9.2)保持不變
我沒有看到任何其他方式來解釋比的值(void *)&x
代表的第一個字節的地址, x
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.