在运行时初始化2D int数组

时间:2009-06-23 20:15:40

标签: c++ arrays initialization declaration multidimensional-array

我从C ++书中得到了以下代码,我无法弄清楚初始化是如何工作的。

从我所看到的,有一个外部for循环通过行和内循环 通过列循环。但它是将值分配到我不理解的数组中。

#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;
}

所以这里有一些问题。

  • 我无法理解2D int数组nums[3][4]的初始化。是什么将(t*4)+i+1分开,以便编译器知道在哪里分配?
  • 如何根据已分配的值知道哪些值将存储在行和列中?
  • 为什么会有星号?
  • 围绕t*4的括号是什么?

我知道初始化二维数组看起来像下面的例子。

#include <iostream>
using namespace std;

int main() {
    char str[3][20] = {{"white" "rabbit"}, {"force"}, {"toad"}}; //initialize 2D character array
    cout << str[0][0] << endl; //first letter of white
    cout << str[0][5] << endl; //first letter of rabbit
    cout << str[1][0] << endl; //first letter of force
    cout << str[2][0] << endl; //first letter of toad

    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

谢谢。

4 个答案:

答案 0 :(得分:2)

(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列的行的数组符号。

答案 1 :(得分:0)

对于第一部分,是不是只分配一个等于行号* 4加上列号的值? I.E.作业的最终结果应该是:

1  2  3  4
5  6  7  8
9 10 11 12

因此表达式(t * 4)+ i + 1表示“4乘以行号加上列号加1”。请注意,在这种情况下,行号和列号从0开始。

答案 2 :(得分: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 ..等等。

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

答案 3 :(得分:0)

  1. nums [t] [i]是数组中的一个位置,它赋值为(t * 4)+ i + 1.

    因此,如果t = 1且i = 1,则点数[1] [1]将等于(1 * 4)+ 1 + 1,即6。

  2. 见上文。

  3. Asterisk用于倍增。

  4. 你首先在()中做任何数学方程中的事情。