在运行时初始化2D int数组 我从C++的书中得到了下面的代码,我无法理解初始化是如何工作的。

在运行时初始化2D int数组 我从C++的书中得到了下面的代码,我无法理解初始化是如何工作的。,c++,arrays,initialization,declaration,multidimensional-array,C++,Arrays,Initialization,Declaration,Multidimensional Array,从我所看到的,有一个外循环通过行循环,和内循环 在柱子上循环。但我不理解的是数组中的赋值 #include <iostream> using namespace std; int main() { int t,i, nums[3][4]; for(t=0; t < 3; ++t) { for(i=0; i < 4; ++i) { nums[t][i] = (t*4)+i+1; //I don't understand this part/l

从我所看到的,有一个外循环通过行循环,和内循环 在柱子上循环。但我不理解的是数组中的赋值

#include <iostream>
using namespace std;

int main()
{
  int t,i, nums[3][4];

  for(t=0; t < 3; ++t) {
    for(i=0; i < 4; ++i) {
      nums[t][i] = (t*4)+i+1; //I don't understand this part/line
      cout << nums[t][i] << ' ';
    }
    cout << '\n';
  }

  return 0;
}
据我所知,在记忆中是这样的

  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 w h i t e r a b b i t  0
1 f o r c e 0
2 t o a d 0
多谢各位

(t*4)+i+1
是一个算术表达式。t和i是整数,*表示乘法。所以对于第1行第2列,t=1,i=2,nums[1][2]=1x4+2+1=7

哦,忘了几件事。首先,()指定操作顺序。所以t*4是先做的。请注意,在这种情况下()是不必要的,因为乘法运算符优先于加号运算符


另外,我无法从您的问题中判断您是否已经知道这一点,但行[t][I]的含义是用于访问第t行和第I列的行的数组表示法。

对于第一部分,它不只是将a值赋值等于行号*4加上列号吗?即,任务的最终结果应为:

1  2  3  4
5  6  7  8
9 10 11 12
所以表达式(t*4)+i+1表示“4乘以行数加上列数加1”。请注意,本例中的行号和列号从0开始。

让我们看看,您有

int t,i, nums[3][4];
在这里,我们为2d数组保留空间。数组中的值将具有随机值,因为您只保留了空间

该行:

nums[t][i] = (t*4)+i+1; //I don't understand this part/line
将值指定给数组。t和i是循环计数器,行(t*4)+i+1表示取t的值,乘以4,再加上i和1

对于t=0,i=0,可以得到nums[0][0]的值(0*4)+0+1,即1。。等等

当然()只是基本的数学括号

  • nums[t][i]是数组中分配(t*4)+i+1值的一个点

    因此,如果t=1,i=1,那么spot num[1][1]将等于(1*4)+1+1,即6

  • 见上文

  • 星号表示乘法

  • 你先做()中的事情,就像在任何数学方程中一样


  • (t*4)+i+1中没有魔法;它的意思是(t乘以4)加上i加1。如果t为0,i为0,则得到0*4+0+1=1;如果t为1,i为1,则得到1*4+1+1=6,依此类推。我现在了解了数组中每个int的算术表达式是如何工作的,等等。nums[2][2]=2*4+2+1。所以索引nums[2][2]=11,谢谢。
    nums[t][i] = (t*4)+i+1; //I don't understand this part/line