[英]C++ implicit conversion of pointer type
考慮這種情況:
int *ptr;
int offset;
ptr = <some_address>;
offset = 10;
假設offset
是32位變量。 ptr
具有int*
類型,目標體系結構是64位(因此ptr
是8字節變量), offset
具有int
類型。 計算表達式*(ptr + offset)
值時將執行什么轉換? 在2003 C ++標准中,我在哪里可以讀到它?
這是標准對此[expr.add] / 4的評價:
當將具有整數類型的表達式添加到指針或從指針中減去時,結果將具有指針操作數的類型。 如果指針操作數指向數組object84的元素,並且數組足夠大,則結果指向與原始元素偏移的元素,以使結果數組元素和原始數組元素的下標之差等於整數表達式。 換句話說,如果表達式P指向數組對象的第i個元素,則表達式(P)+ N(相當於N +(P))和(P)-N(其中N的值為n)表示分別存在於數組對象的第i + n個元素和第i =個第n個元素的情況下(前提是它們存在)。
用簡單的話來說,這意味着當您寫ptr + offset
時, ptr
指向的地址將增加offset * sizeof(*ptr)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.