Question

I got the code below from a C++ book, and I cannot figure out how the initialization works.

From what I can see, there is an outer for loop cycling trough the rows, and the inner loop cycling trough the column. But its is the assignment of the values into the array that I do not understand.

#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;
}

so here are some questions.

  • I cannot understand the initialization of the 2D int array nums[3][4]. What separates the (t*4)+i+1, so that the compiler knows what to assign where?
  • How do I know what values will be stored in the rows and columns, based on what values have been assigned?
  • Why is there an asterisk?
  • What are the parentheses around t*4 for?

I understand that initialization two-dimensional arrays look like the following example.

#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;
}

And from what I know, like this in memory.

  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

Thank you.

Was it helpful?

Solution

(t*4)+i+1

Is an arithmetic expression. t and i are ints, the * means multiply. So for row 1, column 2, t = 1, i = 2, and nums[1][2] = 1x4+2+1 = 7.

Oh, forgot a couple things. First, the () is to specify the order of operations. So the t*4 is done first. Note that in this case the () is unnecessary, since the multiply operator takes precedence over the plus operator anyway.

Also, I couldn't tell from your question if you knew this already or not, but the meaning of rows[t][i] is array notation for accessing rows at row t and column i.

OTHER TIPS

For the first part, isn't it just assigning the a value equal to the row number * 4 plus the column number? I.E. the end result of the assignment should be:

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

So the expression (t*4)+i+1 means "4 multiplied by the row number plus the column number plus 1". Note that the row number and column numbers in this case start from 0.

  1. nums[t][i] is the one spot in the array it is assigning the value of (t*4)+i+1.

    So if t = 1 and i = 1 then the spot num[1][1] will equal (1*4)+1+1 which is 6.

  2. See above.

  3. Asterisk is for multiplying.

  4. You do what's in the ( ) first just like in any mathematical equation.

Lets see, you have

int t,i, nums[3][4];

where we reserve space for the 2d array. The values inside the array will have random values since you only reserved space.

The line :

nums[t][i] = (t*4)+i+1; //I don't understand this part/line

Assigns the values to the array. You have t and i which are loop counters, and the line (t*4)+i+1 means, take value of t, multiply with 4, plus i and plus 1.

So for t=0, i =0, you get that nums[0][0] has value (0*4) + 0 + 1 which is 1.. etc for everything else.

And ofcourse the () are just basic math parentheses.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top