C++ 警告 : "Pointer parameter "arr"can be pointer to const"

标签 c++ arrays pointers

我有下面三个函数,我不确定为什么第二个和第三个在 *arr 处有警告,而第一个没有。警告是什么意思以及如何解决这个问题?

IDE:Clion 2017.3 MinGW64 5.0,CMake 3.9.4

谢谢。

int getFirstEven(int n, int *arr) {
    for (int i = 0; i < n; ++i) {
        if (arr[i] % 2 == 0)
            return arr[i];
    }
    return -1;
}

int getLastOdd(int n, int *arr) {
    int lastOdd = -1;
    for (int i = 0; i < n; ++i) {
        if (arr[i] % 2 != 0)
            lastOdd = arr[i];
    }
    return lastOdd;
}

int countElement(int n, int *arr, int e) {
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] == e)
            cnt++;
    }
    return cnt;
}

enter image description here

最佳答案

在可能的情况下支持不可变性并使用 const 指示不可变的事物是有意义的。

警告意味着您的函数不会修改 arr 指向的数据,因此可以使用指向 const 参数的指针来更好地声明该函数。大概是这样的:

int getFirstEven(int n, int const* arr) {
    for (int i = 0; i < n; ++i) {
        if (arr[i] % 2 == 0)
            return arr[i];
    }
    return -1;
}

关于C++ 警告 : "Pointer parameter "arr"can be pointer to const",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860316/

相关文章:

c++ - 来自 typedef 结构的错误

c++ - 如何将bmp加载到GLubyte数组中?

javascript - 映射数组中的属性并在 JavaScript es6 中连接一个字符串

java - 将一维数组存储为二维

c++ - 这个错误是什么意思: "error: expected specifier-qualifier-list before ' type_name'"?

c++ - 严重错误:找不到 'boost/uuid/uuid.hpp'文件

c++ - 如何将类(class)的公共(public)成员设为私有(private)?

javascript - 如何从 WebService 调用响应动态初始化 JavaScript 中的数组

c++ - 这个带有 vector 的简单代码有什么问题?

pointers - 隐藏 nil 值,理解为什么 golang 在这里失败