我有下面三个函数,我不确定为什么第二个和第三个在 *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;
}
最佳答案
在可能的情况下支持不可变性并使用 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/