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