不确定查找功能在 CPP 中的工作原理

Not sure how find function works in CPP

本文关键字:工作 CPP 查找 功能 不确定      更新时间:2023-10-16

我不明白 find 函数如何能够在此代码中返回数组中元素第一次出现的位置。下面的代码将打印 4。

据我了解,arr 应该有数组的基址,ptr 应该有第一次出现的 55 的内存位置地址,当我打印出来时,它们都是:Ox470000 和 Ox470010,所以我的问题是为什么我们在打印时得到 4 (ptr-arr)。

#include <iostream>
#include <algorithm>  
using  namespace std;                 //for find()
int arr[] = { 11, 22, 33, 44, 55, 66, 77, 88 };
int main()
{
int* ptr;
ptr = find(arr, arr+8, 55);          //find first 55
cout << "First object with value 33 found at offset"
<< (ptr-arr) << endl;
cin>>arr[0];
return 0;
}

当我打印时,它们都是:Ox470000和Ox470010,所以我的问题是为什么我们在打印时得到4(ptr-arr)。

以下是cpp首选项的引述:

如果指针 P 指向数组的第 i

个元素,指针 Q 指向同一数组的第 j 个元素,则表达式 P-Q 的值为 i-j,前提是该值适合 std::p trdiff_t。

换句话说,您的减法不会以字节(0x10)的形式返回偏移量,而是以索引位置的差异(4-0)返回。

您将整数存储在数组arr中。这意味着,对于每个位置arr[i]有四个字节。如果您从所指向的地址中获取差异,您将看到:

$ echo $(( 16#470010 - 16#470000 ))
16

这意味着从第一个地址到第二个地址有 16 个字节。因此,当您打印(ptr - arr)时,您实际上拥有四个整数。

当您从另一个指针中子指针时,结果意味着此类型指向的数量是