指针类型的C 隐式转换

C++ implicit conversion of pointer type

本文关键字:转换 类型 指针      更新时间:2023-10-16

考虑这种情况:

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:

的说法

当将具有积分类型的表达式添加到指针中时,结果具有指针操作数的类型。如果指针操作数指向数组对象84的元素,并且数组足够大,则结果指向与原始元素的元素偏移,以使结果和原始数组元素的下标差等于积分表达式。换句话说,如果表达式p指向数组对象的第i-the元素,则表达式(p) n(等效地,n (p))和(p)-n(其中n具有值n)点分别为数组对象的i n-th和i≠n元素。

用更简单的单词,这意味着在编写ptr + offset时,ptr指向的地址会增加offset * sizeof(*ptr)