您会收到此错误,因为您试图增加数组。这是无效的,因为在c++中,数组的名称可以被隐式转换为指向第一个索引的常量指针。您不能增加数组,因为数组是一个容器,增加容器没有意义。
要完全回答您的问题,我需要解释一些事情。让我尝试一下,其他人可以补充。
请记住,有三种类型的常量指针。
1.指向常量内存位置的指针。
这是一个普通指针,但它指向一个本质上是常量的变量(实际上是只读变量)。这意味着通过它指向的变量的值不能通过它来更改。通常用于指向常量变量。
const int x = 10 ;
const int *ptr = & x ;
这里,你不能执行*ptr = 5;
,因为指针指向的是一个常量变量。
2.指向内存位置的常量指针。
这是一个指针,在整个程序中只能指向一个内存位置。它指向的变量的值可以更改,但指针本身是常量。它的声明方式如下。
int x = 10, y = 5 ;
int * const ptr = &x ;
您不能在程序后面执行 ptr = &y ;
这样的操作。数组也可以被隐式转换为指向内存位置的常量指针,因此不能以这种方式进行递增或递减。
(如果您愿意,可以在此处阅读有关此内容的更多信息:
什么是数组衰减?)
3. 指向常量内存位置的常量指针。
这是一个常量指针,它本身是常量并且还指向一个常量内存位置。它的声明如下。
const int x = 8 ;
const int * const ptr = &x ;
这意味着指针不能指向初始化位置以外的任何地方,甚至不能更改其指向位置的值。
我希望这个概念现在非常清晰。 现在回答您的问题:您想通过指针算术打印数组,但是您不能增加数组本身。 因此,解决此问题的一个方法是创建另一个指针(一个普通指针)并将其分配给数组第一个索引的地址。 然后,您可以增加,减少或更改该数组的值。 类似这样:
int arr [] = {1, 2, 3, 4, 5} ;
int *ptr = arr ;
for (int i = 0 ; i < 5 ; i++)
{
cout << *ptr << " " ;
ptr++ ;
}