我从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;
}
所以这里有一些问题。
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
谢谢。
答案 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)
nums [t] [i]是数组中的一个位置,它赋值为(t * 4)+ i + 1.
因此,如果t = 1且i = 1,则点数[1] [1]将等于(1 * 4)+ 1 + 1,即6。
见上文。
Asterisk用于倍增。
你首先在()中做任何数学方程中的事情。