C ++隐式转换指针类型

时间:2015-05-07 08:25:29

标签: c++ implicit-conversion pointer-conversion

考虑这种情况:

int *ptr;
int offset;
ptr = <some_address>;
offset = 10;

假设offset是32位变量。 ptr的类型为int*,目标架构为64位(因此ptr为8字节变量),offset的类型为int。在计算表达式*(ptr + offset)的值时将执行什么转换?我在哪里可以阅读2003 C ++标准?

1 个答案:

答案 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