C++指针语法不正确?

Sid*_*enu 0 c++ arrays pointers

我在这个链接中看到了这段代码 - http://www.tutorialspoint.com/cplusplus/cpp_pointers_vs_arrays.htm.看看第一段代码.

#include <iostream>

using namespace std;
const int MAX = 3;

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

// let us have array address in pointer.
ptr = var;
for (int i = 0; i < MAX; i++)
{
   cout << "Address of var[" << i << "] = ";
   cout << ptr << endl;

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

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

不应该ptr = &var而不是ptr = var吗?它低于评论.为什么它被简单地声明var而不是&var

mol*_*ilo 8

var 将衰减为指向其第一个元素的指针.

ptr = var;
Run Code Online (Sandbox Code Playgroud)

相当于

ptr = &var[0];
Run Code Online (Sandbox Code Playgroud)

&var是指向数组的指针,而不是指向数组int.

int (*aptr)[MAX] = &var;
Run Code Online (Sandbox Code Playgroud)

将是有效的,但它并不意味着相同 - *aptr是一个MAX元素数组,而不是int.

该教程声称"指针和数组在许多情况下可以互换"是完全错误的.

这种情况唯一可以"交换"任何东西; 当某些东西需要指针时,数组会衰减成指向其第一个元素的指针.
没有一种情况可以使用指针代替数组.

令人困惑的是,ptr在非正式会话中通常称为"指向数组的指针"甚至是"数组",即使这在形式上是不正确的.
这是因为"指向数组的第一个元素的指针"非常令人满意,对于非初学者来说,通常从上下文中可以清楚地看到实际意味着什么.