不确定查找功能在 CPP 中的工作原理
Not sure how find function works in CPP
我不明白 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)
时,您实际上拥有四个整数。
当您从另一个指针中子指针时,结果意味着此类型指向的数量是
相关文章:
- 有没有办法让这个模板在 cpp 中工作?
- 使用.cpp文件让 RcppArmadillo 在 Rstudio 中工作
- 创建链表,但无法按 CPP 的预期工作
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- 运算符重载在 CPP 中的排序中如何工作?
- 简单的 CPP 地图存储和访问无法按预期工作
- (c++)无法让 void 函数工作,主.cpp内部的几行也有问题
- CPP / JUCE 音频编程框架 - 滑块数组不起作用 - 单个滑块工作
- 程序编译和运行,但一段时间后,它停止使用Typedef关键字在CPP上工作
- CPP:超载的嵌套操作员无法正常工作
- "string::erase"如何在 cpp 中工作?
- 在macOSX上编译boost_asio/example/ssl/server.cpp可以在Linux上工作
- 不完整的参数错误,包括其他.cpp文件中的postgres.cpp工作文件
- 从工作iOS项目中导入.cpp文件并将其重命名为.mm问题
- CPP MQTT Broker代码不工作
- eof函数如何在cpp上工作
- 为什么在多个 cpp 文件中包含相同的标头,然后它们的编译工作
- CPP GDB 崩溃,没有核心和 GDB 附加到工作进程
- 相对于 cpp 不工作目录的路径
- 不确定查找功能在 CPP 中的工作原理