Почему возникает эта неправильная ошибка переменной? - PullRequest
0 голосов
/ 19 октября 2019

Я не могу скомпилировать свою программу, потому что я получаю сообщение об ошибке:

mine.c:40:44: error: subscripted value is neither array nor pointer nor vector
             diamTable[r][c] = diam[r][c] +

Соответствующий код:

int getMax(int *diam, int m, int n) {
    ...
    for(int c=n-1; c>=0; c--) {
        for (int r=0; r<m; r++) {
            ...
            // Where the error occurs
            diamTable[r][c] = diam[r][c] +
                              max(right, max(rightup, rightdown));
        }
    }

// Driver Code
int main(int argc, char* v[]) {
    ...
    printf("%d\n", getMax(&diam[m][n], m, n));

    return 0;
}

Я надеюсь, что кто-то знает, почему я получаювышеуказанная ошибка и как я могу это исправить.

1 Ответ

1 голос
/ 19 октября 2019

Параметр diam функции getMax объявлен как

int *diam

Таким образом, вы можете применить только один оператор индекса к переменной. Например,

diam[r]

В этом случае типом выражения является скалярный тип int. Таким образом, вы не можете применять второй оператор индекса для объекта типа int.

С другой стороны, в этом вызове

getMax(&diam[m][n], m, n)

вы передаете указатель на память за пределы массиваdiam то есть вы передаете адрес элемента diam[n][m], который не существует в массиве.

Чтобы использовать diam в качестве двумерного массива, вам нужно объявить функцию как

int getMax( int m, int n, int diam[m][n] ) 

и вызовите его как

getMax( m, n, diam )

В этом случае в функции параметр diam будет иметь тип int ( * )[n], и вы можете применить два оператора индекса к указателю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...