当您尝试增加数组时,您会收到此错误。它是无效的,因为在 C++ 中,数组的名称可以隐式转换为指向第一个索引的常量指针。您不能递增数组,因为数组是一个容器,递增容器是没有意义的。
为了完整地回答你的问题,我需要解释一些事情。我试试,其他人可以补充。
请记住,常量指针分为三种类型。
1.指向常量内存位置的指针。
这是一个普通的指针,但它指向一个本质上是常量的变量(实际上是只读变量)。这意味着它所指向的变量的值不能通过它来改变。通常它被用来像这样指向一个常量变量。
const int x = 10 ;
const int *ptr = & x ;
在这里,你不能做*ptr = 5 ;
因为指针指向的是一个常量变量。
2.指向内存位置的常量指针。
这是一个指针,在整个程序中只能指向一个内存位置。它所指向的变量的值可以改变,但指针本身是不变的。它是这样声明的。
int x = 10, y = 5 ;
int * const ptr = &x ;
你不能做ptr = &y ;
稍后在节目中。数组也可以隐式转换为指向内存位置的常量指针。所以它不能以这种方式递增或递减。
(如果您愿意,可以在这里阅读:什么是数组衰减? https://stackoverflow.com/questions/1461432/what-is-array-decaying)
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++ ;
}