Inicializace 2D int array do doby chodu

hlasů
0

Mám kód pod ze C ++ knihy, a nemohu přijít na to, jak inicializace funguje.

Z toho, co vidím, že je vnější pro smyčky cyklistiku koryto řádky, a vnitřní smyčka cyklování koryto sloupec. Ale jeho je přiřazení hodnot do pole, které nerozumím.

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

takže tady jsou některé otázky.

  • Nemohu pochopit inicializaci 2D poli int nums[3][4]. Co odděluje (t*4)+i+1, takže kompilátor ví, co má určit, kde?
  • Jak mám vědět, jaké hodnoty budou uloženy v řádcích a sloupcích, na základě jaké hodnoty byly přiřazeny?
  • Proč je tam hvězdička?
  • Jaké jsou závorky kolem t*4pro?

Chápu, že inicializace dvojrozměrné pole vypadat jako na následujícím příkladu.

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

A z toho, co vím, takhle v paměti.

  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

Děkuji.

Položena 23/06/2009 v 21:15
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
2

(t*4)+i+1

Je aritmetický výraz. t a i jsou ints se * znamená násobení. Takže pro řádku 1, sloupec 2, t = 1, i = 2, a nums [1] [2] = 1x4 + 2 + 1 = 7.

Ach, zapomněl pár věcí. Za prvé, () je pro určení pořadí operací. Takže t * 4 se provádí jako první. Všimněte si, že v tomto případě () je zbytečná, neboť množí operátor přednost před operátorem a navíc tak jako tak.

Také jsem nemohl poznat z vaší otázky, pokud jste to již ani nevěděli, ale význam řádků [t] [i] je pole notaci pro přístup řádků v řádku t a I sloupci.

Odpovězeno 23/06/2009 v 21:22
zdroj uživatelem

hlasů
0

V první části, není to jen přiřazení hodnotu rovnou počtu řádku * 4 plus číslo sloupce? IE konečný výsledek přiřazení by měla být:

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

Takže výraz (t * 4) + i + 1 znamená "4 vynásobený počtem řádku plus číslo sloupce plus 1". Všimněte si, že počet sloupců a čísla řádků v tomto případě začít od 0 ° C.

Odpovězeno 23/06/2009 v 21:24
zdroj uživatelem

hlasů
0

Podívejme se, máte

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

kde si vyhrazujeme prostor pro 2D pole. Hodnoty uvnitř pole bude mít náhodné hodnoty, protože jen vyhrazené místo.

Linie :

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

Přiřadí hodnoty do pole. Máte t a i, které jsou čítače smyček, a proužek (t * 4) + i + 1 znamená, se hodnota T, násobit se 4, a i a a 1.

Takže pro t = 0, i = 0, dostanete, že nums [0] [0] má hodnotu (0 * 4) + 0 + 1, který je 1 .. atd všechno ostatní.

A samozřejmě The () jsou jen základní matematické závorky.

Odpovězeno 23/06/2009 v 21:26
zdroj uživatelem

hlasů
0
  1. nums [t] [i] je jedno místo v poli se přiřazením hodnoty (T * 4) + i + 1.

    Takže pokud t = 1 a i = 1, pak místo num [1] [1] se rovná (1 * 4) + 1 + 1, který je 6.

  2. Viz výše.

  3. Asterisk je pro násobení.

  4. Děláte to, co je v () nejprve stejně jako v jakékoli matematické rovnice.

Odpovězeno 23/06/2009 v 21:27
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more