考虑这种情况:
int *ptr;
int offset;
ptr = <some_address>;
offset = 10;
假设offset
是32位变量。 ptr
的类型为int*
,目标架构为64位(因此ptr
为8字节变量),offset
的类型为int
。在计算表达式*(ptr + offset)
的值时将执行什么转换?我在哪里可以阅读2003 C ++标准?
答案 0 :(得分:4)
这是标准对此[expr.add] / 4:
的评价当向指针添加或从指针中减去具有整数类型的表达式时,结果具有指针操作数的类型。如果指针操作数指向数组object84的元素,并且数组足够大,则结果指向偏离原始元素的元素,使得结果元素和原始数组元素的下标的差异等于整数表达式。换句话说,如果表达式P指向数组对象的第i个元素,则表达式(P)+ N(等效地,N +(P))和(P)-N(其中N具有值n)指向分别为数组对象的第i + n和第i个元素,只要它们存在。
简单来说,这意味着当您编写ptr
时,offset * sizeof(*ptr)
指向的地址会增加ptr + offset
。