Posted By: medvidek (Zase za polarnim kruhem) on 'CZprogram'
Title:     Re: Dvourozmerne pole objektu v C++
Date:      Sun Jul 27 22:28:55 2003

JerryIII se nam zase rozjel ;) Fascinuje me,... ale ne, to by patrilo na jiny 
board. Kazdopadne s tim copy ctorem je zcela mimo misu. 

> potrebuji nadefinovat a predavat dvourozmerne pole objektu, zkousel jsem
> neco 

>          pole[i][j] = k;

Cituji http://gotw.ca/gotw/086.htm:
In C (and C++), an expression of the form x[y], where one of x and y is a 
pointer type and the other is an integer value, always means *(x+y). 

Odskok stranou - na to URL se doporucuju podivat vsem milovnikum C++ (a nejen 
na 086)

Cili to tvoje prepises jako
(*(pole+i))[j]
a dal jako
*(*(pole+i))+j)

Z toho je videt, ze prekladac vezme pointer pole, "posune se" v pameti o i 
prvku a hodnota v tom miste pameti je hodnota toho vyrazu pole[i]. V nasem 
pripade je ta hodnota zase pointer. Cili se podiva, kam ukazuje (a v Tvem 
pripade ukazuje nekam do pryc), "posune se" v pameti od toho mista kam ukazuje 
o j prvku a tam sahne pro hodnotu. 

Cili dvourozmerne pole v C/C++ defacto neexistuje a je vzdy vytvoreno jako 
1D pole pointeru na radky nebo sloupce (ktere jsou pak samozrejme zase 1D pole)

> Bod **pole =  (Bod **) new Bod[3][3];

Tato alokace je blbe.

Spravne je

Bod** pole;
pole = new Bod*[pocet_radku]; // nalokujeme pointery na radky
for (int i = 0; i < pocet_radku; ++i) {
  pole[i] = new Bod[pocet_sloupcu]; // naalokujeme i-ty radek
}

Zbytek by Ti pak mel fungovat.

> dammie 

                 medvidek

--
   Taky vam uz odkvetaji narcisy?
   (signatura aktualizovana 3. 7. 2003)

Search the boards