C ++为什么访问数组中的元素会返回指针?

时间:2018-05-23 15:03:49

标签: c++ pointers

我的舒适语言是Java,但最近我决定学习C ++语法。

int ks(int Wt[], int Va[], int N, int totW){

if(N==0){
    return 0;
}

int V[N+1][totW+1];

for(int i = 0; i < N+1; i++){
    V[i][0] = 0; // fill first row with 0's
}
for(int i = 0; i < totW+1; i++){
    V[0][i] = 0; // fill first column with 0's
}

for(int i = 1; i < N+1; i++){
    for(int j = 0; j < totW+1; j++){
        if(Wt[i] <= j) {
            V[i][j] = std::max(V[i-1][j], Va[i]+V[i-1, j- Wt[i]]);
        } else {
            V[i][j] = V[i-1][j];
        }
    }
}
return V[N][totW];
}

这是我对01背包的实现。但是,我在行中收到错误:

V[i][j] = std::max(V[i-1][j], Va[i]+V[i-1, j- Wt[i]]);

错误如下:

  

没有重载函数的实例“std :: max”匹配参数列表 - 参数类型是:(int,int *)

我的问题是,为什么Va[i]会返回指针,而V[i-1][j]却没有?

1 个答案:

答案 0 :(得分:3)

V[i-1, j- Wt[i]]不是你在C ++中访问二维数组的方式。事实上,没有原始的二维数组,只有数组的数组(V是什么)。您总是需要连续几次访问[]

该表达式中的,(在其他表达式中并不代表其他内容)是comma operator,它评估然后丢弃其左操作数。所以你的代码试图做的是:

  1. 计算i-1,然后丢弃结果。
  2. 计算j-Wt[i],然后访问V[j-Wt[i]]。那不是你想要的。