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

时间:2014-12-14 12:44:19

标签: c++ arrays std

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

根据我的理解,arr应该有数组的基地址,ptr应该有第一次出现的存储位置的地址,当我打印出来时,它们都是: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;
}

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

  当我打印时,两个人都出现了:Ox470000和Ox470010,所以我的问题是为什么我们打印时会得到4(ptr-arr)。

以下是cppreference的引用:

  

如果指针P指向数组的第i个元素,并且指针Q指向同一数组的第j个元素,则表达式PQ具有值ij,如果该值适合std :: ptrdiff_t。

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

答案 2 :(得分:0)

当您将指针表示为另一个时,结果表示此类型指向的数量为