簡體   English   中英

指針類型的C ++隱式轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM