我不明白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;
}
答案 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)
当您将指针表示为另一个时,结果表示此类型指向的数量为