Инициализация 2D-массива int во время выполнения
-
07-07-2019 - |
Вопрос
Я взял приведенный ниже код из книги по 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.
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 и i — целые числа, * означает умножение.Итак, для строки 1, столбца 2 t = 1, i = 2 и nums[1][2] = 1x4+2+1 = 7.
Ой, забыл пару вещей.Во-первых, () предназначен для указания порядка операций.Итак, t*4 делается первым.Обратите внимание, что в этом случае () не требуется, поскольку оператор умножения в любом случае имеет приоритет над оператором плюс.
Кроме того, из вашего вопроса я не мог сказать, знали ли вы это уже или нет, но значение rows[t][i] — это обозначение массива для доступа к строкам в строке t и столбце i.
Другие советы
Во-первых, разве это не просто присвоение значения, равного номеру строки * 4 плюс номер столбца?И.Е.Конечным результатом задания должно быть:
1 2 3 4
5 6 7 8
9 10 11 12
Таким образом, выражение (t*4)+i+1 означает «4, умноженное на номер строки плюс номер столбца плюс 1».Обратите внимание, что номер строки и номера столбцов в этом случае начинаются с 0.
nums[t][i] — это единственное место в массиве, которому присваивается значение (t*4)+i+1.
Таким образом, если t = 1 и i = 1, то точка num[1][1] будет равна (1*4)+1+1, что равно 6.
См. выше.
Звездочка предназначена для умножения.
Сначала вы делаете то, что указано в ( ), как и в любом математическом уравнении.
Посмотрим, у тебя есть
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..и т. д. для всего остального.
И, конечно же, () — это просто математические круглые скобки.