浅浅问下二维数组赋值

定义了一个二维数组arr[3][3]
像是个三行三列的九宫格
arr[i][j] i是行j是列
用for循环赋的值
然后发现
是不是arr[0][3]会赋值给arr[1][0]
就是理论上不存在的arr[x][3]会赋值给下一行第一列的(arr[x+1][0])
//我知道理论上不存在啊
为什么有这个不存在的项,因为我用的for循环,我知道错了,但我很好奇是不是这个赋值规则

在这种情况下,您的代码会产生数组越界异常,因为您试图访问数组中不存在的元素。

例如,如果您有以下代码:

int[][] arr = new int[3][3];
for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    arr[i][j] = i * j;
  }
}

那么在这种情况下,变量i的值从0到2,变量j的值从0到2。因此,在这个循环中,只会有数组中的元素被赋值。不会出现越界的情况。


但是,如果您有以下代码:

int[][] arr = new int[3][3];
for (int i = 0; i < 4; i++) {
  for (int j = 0; j < 4; j++) {
    arr[i][j] = i * j;
  }
}

那么在这种情况下,变量i的值从0到3,变量j的值从0到3。这就会导致在数组中不存在的元素被赋值,从而产生数组越界异常。


因此,您需要确保您的循环计数器变量(在这种情况下为i和j)不会超出数组的边界。

在 C++ 中,数组的下标是从 0 开始的,所以定义的二维数组 arr 有 3 行 3 列,它的下标范围应该是 [0, 2]。如果使用的是 for 循环,那么当 i 等于 3 的时候循环就会结束,所以理论上不存在 arr[3] 这个下标。

如果访问超出数组边界的元素,那么就会出现未定义的行为。这意味着程序可能会崩溃,或者产生意想不到的结果。所以在使用数组时要小心不要越界访问。

如果想给 arr[1][0] 赋值,那么应该使用 arr[1][0] = value 这样的语句。
仅供参考,望采纳。