指向数组项的 cout 指针打印出与预期不同的值

cout pointer to array item is printing out different value than expected

为什么当我用这个方法打印到控制台时,我的指针值没有改变:

int main()
{
    int array[] = {1, 2, 3, 4, 5};
    int *p = array;
    p++;
    *p = 100;
    for ( int i = 0; i < 5; i++)
    {
        cout << *array + i << ", ";
    }
    return 0;
}

当我将其打印到控制台时,我得到 1, 2, 3, 4, 5。在这种情况下,实际指向的指针是什么?在此示例中,array[1] 应具有 100 的值,但它不会更改。

我也知道,如果我从 5 开始数组,计数器将按从 5 开始的顺序打印。幕后发生了什么导致这一切发生?

*array 解析为数组的第一个元素。 *array + ii 添加到该元素,因为由于运算符优先级,它被解析为 (*array) + i。所以你的循环打印 1 + 01 + 1

如果要打印数组的元素,可以这样做:

for (auto e : array) cout << e << ", ";

如果您想显式使用指针运算,则必须在正确的位置使用括号:

for ( int i = 0; i < 5; i++)
     cout << *(array + i) << ", ";

尝试

cout << *(array + i) << ", ";

您正在打印 array[0] + i,即 1 + i for i in [0, 5)。二元 + 运算符不可能比一元 * 更高 precedence。在 + 两边使用括号形成正确的表达式:

*(array + i) // or array[i]