为什么此代码会导致编译错误? [C,全局变量,二维阵列]

时间:2017-04-21 19:52:50

标签: c arrays global-variables

#include<stdio.h>
int arr[12][5];


int score[12][5];
int n;

void chk(){
    int score = 0;
    for(int i=n-1;i>=0;i--){
        for(int j = 0;j<5;j++){
            scanf("%d",&(arr[i][j]));
         }
    }


    for(int i = n-1;i>=0;i--){
        for(int j=0;j<5;j++){
           if(i==n-1)
               score[i][j] = arr[i][j];
            else{
               int mx = score[i+1][j];
               if(j>0 && score[i+1][j-1]>mx)
                   mx = score[i+1][j-1];
               else if(j<4 && score[i+1][j+1]>mx)
                   mx = score[i+1][j-1];
               score[i][j] = arr[i][j] + mx;
            }
       }
   }

   int mx_score = score[0][2];
   if(score[0][1]>mx_score){
       mx_score = score[0][1];
   }
   else if(score[0][3]>mx_score){
       mx_score = score[0][3];
   }

   printf("%d",mx_score);
}

int main(){
   int T;
   scanf("%d",&T);
   for(int i = 0;i<T;i++){
      scanf("%d",&n);
      chk(n);
   }
 return 0;
}

编译错误:

Subscripted value is not an array, pointer or vector.

导致错误的变量是score。 我不明白为什么arr工作正常但score没有。 你会如何更好地编写这段代码?

我认为正确缩进

1 个答案:

答案 0 :(得分:0)

int score[12][5];
void chk() {
int score = 0;
...

你重新宣布score;因此,在chk函数的范围内,score表示int不是数组,也不是指针。因此

  

编译错误:订阅的值不是数组,指针或向量

声明局部变量会隐藏具有相同名称的任何全局变量。如果相同范围中需要两个变量,请为它们指定不同的名称。