指向数组的指针,为什么这是最后一个元素的地址?

Ric*_*lev 0 c++ pointers

我正在使用教程point.com示例.

int  var[MAX] = {10, 100, 200};
int  *ptr;

// let us have address of the last element in pointer.
ptr = &var[MAX-1];
for (int i = MAX; i > 0; i--)
{
    cout << "Address of var[" << i << "] = ";
    cout << ptr << endl;

    cout << "Value of var[" << i << "] = ";
    cout << *ptr << endl;

    // point to the previous location
    ptr--;
}
return 0;
Run Code Online (Sandbox Code Playgroud)

那么,&var[MAX - 1] 为什么不&var[MAX]呢?如果我们不使用引用,是否可以以不同的方式解决此问题?

Tar*_*ama 6

因为C++中的数组是从零开始的,即从...开始0和结束n-1.var[MAX]是超出数组末尾的元素,因此超出范围并访问它是未定义的行为.

var   { 10, 100, 200 }
index   ^0  ^1^  ^2^   ^3?
Run Code Online (Sandbox Code Playgroud)