2

考虑这种情况:

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

假设它offset是 32 位变量。ptr有 type int*,目标架构是 64 位(ptr8 字节变量也是如此),offset有 type int。计算表达式的值时会进行什么转换*(ptr + offset)?我在哪里可以阅读 2003 C++ 标准中的相关信息?

4

1 回答 1

5

这就是标准对这个 [expr.add]/4 所说的:

当具有整数类型的表达式被添加到指针或从指针中减去时,结果具有指针操作数的类型。如果指针操作数指向数组 object84 的元素,并且数组足够大,则结果指向与原始元素偏移的元素,使得结果和原始数组元素的下标之差等于积分表达式。换句话说,如果表达式 P 指向数组对象的第 i 个元素,则表达式 (P)+N(等效于 N+(P))和 (P)-N(其中 N 的值为 n)指向分别表示数组对象的第 i + n 个和 i ≠ 第 n 个元素,前提是它们存在。

简单来说,这意味着当你写. 时,ptr指向的地址会递增。offset * sizeof(*ptr)ptr + offset

于 2015-05-07T09:12:20.140 回答