指针算术混淆
Pointer Arithmetic confusion
本文关键字:指针 更新时间:2023-10-16
我知道你可以给一个int加一个指针,减去两个指针,一个指针和一个int,但你能给一个指针加一个int吗。所以5+指针。
您可以,但有限制。指针算术只在数组中有效(或数组末尾后的1)。
以下是一些规则:
5.7加法运算符[expr.add]
5) […]如果指针操作数和结果都指向同一数组对象的元素,或者指向一个过去数组对象的最后一个元素,则评估不应产生溢出;否则,行为为未定义。
和
6) 当减去指向同一数组对象的元素的两个指针时,结果是两个数组元素的下标。[…]除非两个指针都指向同一数组对象的元素,或者超过数组对象的最后一个元素,则行为未定义。
粘贴到此处进行确认。
所以
int* x = new int;
int* y = new int;
可以,但是:
y-x;
x + 4;
y - 1;
或者甚至使用二进制比较运算符的比较都是未定义的行为。
然而,x+1
和1+x
是可以的(单个对象算作大小为1的数组)
在指针中添加int
在语法上是可以的,但有很多问题需要注意,例如溢出错误。
理想情况下,您应该只在一个数组中执行此操作。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错