Вопрос

Я взял приведенный ниже код из книги по 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.

  1. nums[t][i] — это единственное место в массиве, которому присваивается значение (t*4)+i+1.

    Таким образом, если t = 1 и i = 1, то точка num[1][1] будет равна (1*4)+1+1, что равно 6.

  2. См. выше.

  3. Звездочка предназначена для умножения.

  4. Сначала вы делаете то, что указано в ( ), как и в любом математическом уравнении.

Посмотрим, у тебя есть

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..и т. д. для всего остального.

И, конечно же, () — это просто математические круглые скобки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top