在常量数组上使用指针遍历



我正在尝试使用指针循环访问一个常量的整数数组。我的代码如下:

void printArrayPointer(const int arr[], int n){
    for (int *i = arr; i < arr + n; i++) {
        cout << *i << ' ';
    }
}

这给了我一个错误,告诉我从 const int* 到 int* 的转换无效。我知道如何使用按索引遍历来做到这一点(就像使用数组中元素的索引一样),但我正在尝试为此代码使用指针。

正如编译器已经告诉您的那样,该行中存在一个错误:

for (int *i = arr;...

arrconst int[]iint *。如果编译器允许用const int *初始化i则后续代码可以使用i更改存储在a中的const值,因为i是指向非常量数据的指针。这就是代码无法编译并且编译器在错误消息中告诉您的原因。

您必须将i声明为const int *i,它将起作用。

void printArrayPointer(const int arr[], int n){
    for (const int *i = arr; i < arr + n; i++) {
        cout << *i << ' ';
    }
}

正如 axiac 所说,你必须写for (const int* i ...因为 arr 是一个const int*

您仍然可以递增i的原因是,const int*意味着i的内容无法更改,您仍然可以更改i指向的内容。因此,您无法更改数组中的值,但可以更改遍历这些值的 const 指针。

若要使其无法更改指针指向的内容,必须像这样声明它:int* const i 。然后,您可以更改i的内容,但不能更改i指向的内容。您也可以将其设置为两者都无法更改,这可以写为const int* const i.

最新更新