我的代码应该计算数组中有多少负元素。然而,我一直遇到这样的错误"无法将参数"1"的"double(([3]"转换为"int",以将其转换为"double numberNegative(int*,int,int(">
#include <iostream>
using namespace std;
int numberNegative(double arr[], int r, int c);
int counter = 0;
int main(){
double data[2][3] = {{-3.0, 1, 4.5}, {-2.2, 7, 1.4}};
cout<<numberNegative(data, 2, 3)<<endl;
return 0;
}
int numberNegative(double arr[], int r, int c){
for (int i = 0; i < r; i++){
for (int j = 0; j <= c; j++){
if (arr[i] < 0) counter++;
if (arr[i][j] < 0) counter++;
}
return counter;
}
}
好吧——你应该听听你的编译器——这是正确的。
当您有一个2D数组(实际上是数组double [3]
的数组(时,在访问时,第一个间接级别(第一个[..]
(将转换为指向第一个元素的指针。因此double arr[2][3];
被转换为指向数组double[3]
的指针。(指向2个double[3]
阵列中的第一个阵列的指针(。指向数组double[3]
的指针的类型是double (*)[3]
——正如编译器告诉您的那样。
为了使事情正常工作,你的原型应该是:
int numberNegative (double (*arr)[3], int r, int c);
然后在您的函数中,您可以使用计算负值的数量
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (arr[i][j] < 0)
counter++;
}
}
return counter;
注意:j < c
NOTj <= c
(超出数组的边界1(,而没有if (arr[i] < 0) counter++;
尝试将指向double
的指针与0
进行比较。
此外,不能在for
循环中包含return counter;
,并期望为2D数组中的所有负值返回正确的值。在哪里:
for (int i = 0; i < r; i++){
...
return counter;
}
您需要将return counter;
从循环中移到函数的末尾(最后一条语句(。
不需要全局int counter;
,请参阅为什么"使用命名空间std;"被认为是不好的做法?
总之,你会得到:
#include <iostream>
int numberNegative (double (*arr)[3], int r, int c);
int main (void) {
double data[2][3] = {{-3.0, 1, 4.5}, {-2.2, 7, 1.4}};
std::cout << numberNegative (data, 2, 3) << 'n';
}
int numberNegative (double (*arr)[3], int r, int c)
{
int counter = 0;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (arr[i][j] < 0)
counter++;
}
}
return counter;
}
另请参阅:C++:"std::endl"与"\n">
示例使用/输出
$ ./bin/count_double_neg
2
对应于CCD_ 17和CCD_。仔细看看,如果你有任何问题,请告诉我。