指针类型的C 隐式转换
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:
的说法当将具有积分类型的表达式添加到指针中时,结果具有指针操作数的类型。如果指针操作数指向数组对象84的元素,并且数组足够大,则结果指向与原始元素的元素偏移,以使结果和原始数组元素的下标差等于积分表达式。换句话说,如果表达式p指向数组对象的第i-the元素,则表达式(p) n(等效地,n (p))和(p)-n(其中n具有值n)点分别为数组对象的i n-th和i≠n元素。
用更简单的单词,这意味着在编写ptr + offset
时,ptr
指向的地址会增加offset * sizeof(*ptr)
。
相关文章:
- 无法转换类型 C++
- 包含可变参数包的第一个可转换类型的别名的结构
- 将 std::conditional 与不可转换类型(原始与指针)一起使用
- 链接方法时出现转换类型错误
- 如何避免隐式转换类型
- 在多重继承场景中动态强制转换类型
- 编译器不支持的转换类型
- 错误调用功能无法转换类型
- 我想看到一个在整个后缀表达式的上下文中查找转换类型 id 的示例
- 对于动态类型为强制转换类型的对象,dynamic_cast失败
- 无法在初始化中转换类型
- 如何让"auto"转换类型
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 如何从新运算符+(Template类)返回具有转换类型的对象
- 带有模板的基于枚举的工厂无法转换类型
- 使用SWIG类型映射通过字符串转换类型
- 对于可转换类型,设计比循环依赖项更好
- SWIG不能正确转换类型定义
- 将类型转换扩展到可转换类型的对/元组
- 想要将字符数组的部分转换/类型转换为值