提问人:Padmesh Sharma 提问时间:8/22/2023 最后编辑:Vlad from MoscowPadmesh Sharma 更新时间:8/22/2023 访问量:64
数组中指针的减法应该是索引减法还是地址减法?[关闭]
Subtraction of pointers in array should be index subtraction or address subtraction? [closed]
问:
在此处输入图像描述答案不应该是第二个问题吗?
PTR1 保存 ARR[0] 的地址,PTR2 保存 ARR[3] 的地址。所以 (ptr2-ptr1) 应该是 ((3 4(浮点大小)) -(0 4)) 即地址的减法而不是索引的减法。
答:
2赞
Vlad from Moscow
8/22/2023
#1
你写道
float *ptr2 = ptr1 + 3;
所以按照通常的算术,等于 .:)ptr2 - ptr1
3
这同样适用于指针算术。
来自 C++20 标准(7.6.6 加法运算符)
5 当减去两个指针表达式 P 和 Q 时,类型 result 是实现定义的有符号整型;此类型 应与 std::p trdiff_t 中定义的类型相同 标头 (17.2.4)。
(5.2) — 否则,如果 P 和 Q 分别指向数组元素 i 和 j 相同的数组对象 x,表达式 P - Q 的值为 i − j.
那是在这行代码之后
float *ptr2 = ptr1 + 3;
指针的值等于 ,指针的值等于 tp 。差值产生数组中第一个元素和第四个元素之间的数组元素数。ptr1
&arr[0]
ptr2
&arr[3]
要获取两个地址之差的值,您可以编写例如
( ptr2 - ptr1 ) * sizeof( float )
评论
(a + b) - a == b