0

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

据我所知,有一个外部循环循环通过行,内部循环循环通过列。但这是我不明白的将值分配到数组中。

#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 array 的初始化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

4 回答 4

2
(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 列的行的数组表示法。

于 2009-06-23T20:22:16.803 回答
0

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

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

所以表达式 (t*4)+i+1 的意思是“4 乘以行号加列号加 1”。请注意,本例中的行号和列号从 0 开始。

于 2009-06-23T20:24:21.340 回答
0

让我们看看,你有

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.. 其他所有值。

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

于 2009-06-23T20:26:20.757 回答
0
  1. nums[t][i] 是数组中分配 (t*4)+i+1 值的一个点。

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

  2. 看上面。

  3. 星号用于乘法。

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

于 2009-06-23T20:27:12.520 回答