【问题标题】:Initializing 2D int array in run-time在运行时初始化 2D int 数组
【发布时间】:2009-06-23 20:15:40
【问题描述】:

我从一本 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

谢谢。

【问题讨论】:

  • (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 等等。

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


【解决方案1】:
(t*4)+i+1

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

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

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

【讨论】:

  • 我现在明白了算术表达式如何为数组中的每个 int 工作,等等。nums[2][2] = 2*4+2+1。这样索引 nums[2][2]=11,谢谢。
【解决方案2】:

对于第一部分,它不只是分配等于行号 * 4 加上列号的值吗? IE。分配的最终结果应该是:

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

所以表达式 (t*4)+i+1 的意思是“4 乘以行号加列号加 1”。注意这里的行号和列号都是从0开始的。

【讨论】:

    【解决方案3】:
    1. nums[t][i] 是数组中分配 (t*4)+i+1 值的一个点。

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

    2. 见上文。

    3. 星号用于乘法。

    4. 您首先执行 ( ) 中的内容,就像在任何数学方程式中一样。

    【讨论】:

      【解决方案4】:

      让我们看看,你有

      int t,i, nums[3][4];
      

      我们为二维数组保留空间。由于您只保留了空间,因此数组中的值将具有随机值。

      行:

      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.. 以此类推。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 2020-12-18
        • 2015-06-28
        • 2015-08-05
        • 2022-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多