数组中指针的减法应该是索引减法还是地址减法?[关闭]

Subtraction of pointers in array should be index subtraction or address subtraction? [closed]

提问人:Padmesh Sharma 提问时间:8/22/2023 最后编辑:Vlad from MoscowPadmesh Sharma 更新时间:8/22/2023 访问量:64

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

3个月前关闭。

社群在 3 个月前审查了是否重新打开这个问题,并将其关闭:

原始关闭原因未解决

在此处输入图像描述答案不应该是第二个问题吗?

PTR1 保存 ARR[0] 的地址,PTR2 保存 ARR[3] 的地址。所以 (ptr2-ptr1) 应该是 ((3 4(浮点大小)) -(0 4)) 即地址的减法而不是索引的减法。

C++ 指针 算术

评论

3赞 ChrisMM 8/22/2023
请以文本形式发布代码,而不是图像。
0赞 Community 8/22/2023
请澄清您的具体问题或提供其他详细信息以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。
0赞 molbdnilo 8/22/2023
算术照常工作;(a + b) - a == b
0赞 463035818_is_not_an_ai 8/22/2023
指针 - 索引生成指针。指针 - 指针产生指针之间的差值。这个问题非常不清楚。
1赞 Pepijn Kramer 8/22/2023
请注意,在实践中,建议不要基于指针算术编写代码。当前的 C++ 具有足够的(零成本)抽象来避免使用它们的需要。此外,最好不要编写假定特定内存布局的代码,编译器可能会添加填充字节以提高性能。

答:

2赞 Vlad from Moscow 8/22/2023 #1

你写道

float *ptr2 = ptr1 + 3;

所以按照通常的算术,等于 .:)ptr2 - ptr13

这同样适用于指针算术。

来自 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 )