Инициализация 2D массива int во время выполнения - PullRequest
0 голосов
/ 24 июня 2009

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

вот несколько вопросов.

  • Я не могу понять инициализацию двумерного массива int nums[3][4]. Что отделяет (t*4)+i+1, так что компилятор знает, что назначать где?
  • Как узнать, какие значения будут храниться в строках и столбцах, в зависимости от того, какие значения были назначены?
  • Почему там звездочка?
  • Для чего нужны круглые скобки вокруг t*4? 1018 *

Я понимаю, что инициализация двумерных массивов выглядит следующим образом.

#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 ]

2 голосов
/ 24 июня 2009
(t*4)+i+1

Является арифметическим выражением. t и i являются целыми числами, * означает умножение. Таким образом, для строки 1, столбца 2, t = 1, i = 2 и чисел [1] [2] = 1x4 + 2 + 1 = 7.

О, забыл пару вещей. Во-первых, () указывает порядок операций. Таким образом, t * 4 делается первым. Обратите внимание, что в этом случае () не требуется, поскольку оператор умножения в любом случае имеет приоритет над оператором плюс.

Кроме того, я не могу сказать по вашему вопросу, знаете ли вы это уже или нет, но значение строк [t] [i] - это запись массива для доступа к строкам в строке t и столбце i.

0 голосов
/ 24 июня 2009
  1. nums [t] [i] - это одна точка в массиве, которой присваивается значение (t * 4) + i + 1.

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

  2. См. Выше.

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

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

0 голосов
/ 24 июня 2009

Посмотрим, у вас есть

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

И, конечно же, () - это просто основные математические скобки.

0 голосов
/ 24 июня 2009

Для первой части, это не просто присвоение значения, равного номеру строки * 4 плюс номер столбца? И.Е. конечный результат задания должен быть:

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

Таким образом, выражение (t * 4) + i + 1 означает «4, умноженное на номер строки плюс номер столбца плюс 1». Обратите внимание, что номер строки и номера столбца в этом случае начинаются с 0.

...