首页 > 解决方案 > 你能解释一下这个程序中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;
    }
}

它应该只打印列表中的每个元素。

标签: c++arrayspointer-arithmetic

解决方案


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;
 }

后一种形式与普通的原始数组一样快,但更安全。


推荐阅读