"C++ dla każdego. Wydanie II" - błąd ? Lekcja 4.

0

Po raz drugi sięgnąłem po książkę wymienioną w temacie. Za pierwszym razem, wiadomo, wszystkiego do końca nie zrozumiałem. Teraz na spokojnie przerabiam to jeszcze raz. W książce jest chyba pewien błąd, może złe tłumaczenie.

str. 121: "Zainicjalizuj wraz z wartością 0 wszystkie elementy tablicy zadeklarowanej jako SomeArray[2][3][2]."

Tu się pojawiają wątpliwości.

Czy mam zainicjalizować wartością zero pierwszy element tablicy (czyli o zerowym indeksie) ?

Wg odpowiedzi chyba o to chodzi: "SomeArray[2][3][2]=0". W ten sposób inicjujemy pierwszy element tablicy wartością zero.

Bez zaglądania do odpowiedzi raczej wydawało mi się, że chodzi o inicjalizację wszystkich elementów tablicy wartością zero. Błąd w tłumaczeniu ?

3

Błąd to "wraz z", reszta jest ok. Chodzi o wszystkie elementy tej tablicy czyli:

int SomeArray[2][3][2] = {0};

To co napisałeś (SomeArray[2][3][2]=0) to błąd, nie ma elementów o takich indeksach.

0
Endrju napisał(a):

To co napisałeś (SomeArray[2][3][2]=0) to błąd, nie ma elementów o takich indeksach.

Miało być SomeArray[2][3][2]={0}. Pojawia się mały "zonk": http://ideone.com/KOSld

3

Jaki zonk? Przecież to działa dobrze. Jeżeli w inicjalizatorze podasz mniej wartości niż wynosi rozmiar tablicy wtedy reszta wypełniana jest zerami (a raczej wartością domyślną). Jeżeli podasz jedno zero to będziesz miał zero i... zera. Jeżeli podasz 789 to będziesz mieć 789 i zera.

0

Myślałem, że o czymś nie wiem i całą tablicę mogę zainicjalizować tą samą wartością przez int tab[10][5]={7}. Sądziłem, że o to chodzi :) Całą tablicę mogę inicjalizować z użyciem pętli, albo np. int tab[4]={1,2,3,4}. Nie ma sposobu na prostą inicjalizację tablicy stałą wartością ?

1

Są. Chociażby std::fill, std::memset.

2

Małe sprostowanie, tak:

int SomeArray[2][3][2] = {0};

się NIE inicjalizuje całej tablicy...
Tak inicjalizuje się podaną wartością PIERWSZY element, a reszte zeruje. Równie dobrze można by napisać

int SomeArray[2][3][2] = {};

Warto o tym wiedzieć bo taki zapis:

int SomeArray[2][3][2] = {1};

Wcale nie nada całej tablicy wartości 1...

1 użytkowników online, w tym zalogowanych: 0, gości: 1