C语言如何验证M[][]中的位置是否有效?

in C language, how to verfify if the position in M[][] is valid?

伙计们,你知道我什么时候尝试访问这样的职位吗:

M[-2][-1],不要工作,

但是,如果我们尝试像这样访问:

int k = -2;

M[k][k+1],作品?

我正在做作业,我需要验证 M 位置是否在一些随机数 I 和 J 的基础上有效。

    #include <stdio.h>
int main(){
  int matriz[5][5];
  int i, j;
  int cont = 0;
  for(i=0;i<5;i++){
    for(j=0;j<5;j++){
      matriz[i][j] = cont+=1;
    }
  }
  for(i=0;i<5;i++){
    for(j=0;j<5;j++){
      printf("%d ",matriz[i][j]);
    }
    printf("\n");
  }
  
  int k = -2;
  //matriz[-2][-1] = 99; << dont work
  matriz[k][k+1] = 99; // << this works
  printf("\n%d",matriz[k][k+1]); << this works
  printf("\n\n");
  for(i=0;i<5;i++){
    for(j=0;j<5;j++){
      printf("%d ",matriz[i][j]); //<< and this dont change anything on matriz
    }
    printf("\n");
  }
  
}

它在编译器中可能允许它“工作”,但不要这样做,因为您正在更改不属于该数组的内存,并且很可能会导致崩溃或更糟。

您可以通过传入 ij 以及行数和列数来检查函数。

if (i >= 0 && j >= 0 && i < MAX_ROWS && j < MAX_COLS) {
    matriz[i][j] ... do something
} else {
    invalid
}