c++ - 你能解释一下这个程序中array+5的用途吗?
问题描述
我了解它的大部分工作原理,除了main
函数中的第二行:int* end = array+5;
. 这条线是如何工作的?
#inlcude <iostream>
int main()
{
int array[] = {10, 20, 29, 200, 2};
int* end = array+5;
for(int* it = array; it != end; ++it)
{
std::cout << *it << std::endl;
}
}
它应该只打印列表中的每个元素。
解决方案
it != end;
表示它到达了位置 [5],即最后一个 (4) 之后的位置。
int* end = array + 5;
只需创建一个指向 [5] 位置的变量。
它可以工作,但更干净和安全的版本是:
for(int i = 0 ; i < 5 ; i++)
{
std::cout << it[i] << std::endl;
}
当然,您可以将硬编码的 5 替换为sizeof(array)/sizeof(int)
,或者更好的是,使用 std::array。
std::array arr<int,5> = {10, 20, 29, 200, 2};
for(int i = 0 ; i < arr.size() ; i++)
{
std::cout << arr[i] << std::endl;
}
或者
std::array arr<int,5> = {10, 20, 29, 200, 2};
for(auto& it : arr)
{
std::cout << it << std::endl;
}
后一种形式与普通的原始数组一样快,但更安全。
推荐阅读
- karate - 如何在 JsonPath 过滤器中使用变量
- javascript - TypeError:“方法”不是函数
- python - 使用python和正则表达式在字符串中查找倒数第二个小数
- python - 如何在 Tkinter 中显示 100 个不断变化的数据点?
- r - 使用 RSQLite 导入 csv 文件时如何忽略带引号的字符串中的分隔符?
- excel - 根据单元格值将工作簿中的工作表复制并粘贴到不同的工作簿
- firebase - 在项目之间转移 Firebase 存储桶
- docker-compose - 事后有没有办法守护 docker-compose?
- regex - 使用正则表达式在某些数据之间查找数据
- python - 在某些条件下更快地复制 pandas 数据