views:

451

answers:

4

Hello.

I got this code 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 to 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?
  • and what are the () 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.

+1  A: 
(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.

Sean Nyman
I now understand how the arithmetic expression works for each int in the array, etc. nums[2][2] = 2*4+2+1. So that the index nums[2][2]=11, thanks.
Tecurik
A: 

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.

Peter
A: 

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.

Milan
A: 
  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.

MDStephens