IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jakub Sobinovsky:26.7.2017 22:06

Ahoj, potreboval by som pomoc ZAS :D, neviem či správne chápem príklad a tak sa chcem uistiť a hlavne to nechcem odflakovať. Takže v príklade si vytvoríme pole pomocou dereferencovania ukazatela

int** pole = new int*[vyska];

Čiže najprv nám pointer ukazuje na premenu vyska (to bude pole[i])
A potom neskôr v cykle:

for( int i = 0; i < vyska; i++ )
        pole[i] = new int[sirka];

nám ukazuje na premenu sirka(to bude pole[j]) ?
**Otázka:Prečo je to v cykle ? A chápem to ziatial dobre ? Ďakujem za všetky rady !!

#include<iostream>
using namespace std;
int sirka = 15;
int vyska = 12;
int main( )
{
        {
        // vytvoreni pole
        int** pole = new int*[vyska];
        for( int i = 0; i < vyska; i++ )
                pole[i] = new int[sirka];
        // naplneni pole
        for(int i = 0; i < vyska; i++ )
                for(int j = 0; j < sirka; j++ )
                        pole[i][j] = i * 10 + j;
        // vypsani hodnoty
        cout << "Hodnota na souradnicich [8,2] je " << pole[8][2] << endl;
        // smazani pole
        for( int i = 0; i < vyska; i++ )
                delete[] pole[i];
        delete[] pole;
        cin.get();
        return 0;
}
 
Odpovědět
26.7.2017 22:06
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Jakub Sobinovsky
Martin Dráb:26.7.2017 22:36

Kód:

int** pole = new int*[vyska];

ti alokuje pole ukazatelů na int s počtem prvků rovných hodnotě proměnné vyska, tzn. ne, neukazuje na tu proměnnou. Do hranatých závorek udáváš rozměr, ne parametr konstruktoru.

Kód

pole[i] = new int[sirka];

alokuje pole intů délky odpovídající hodnotě proměnné sirka, tzn. ne, neukazuje to na tu proměnnou. Adresa počátku alokovaného pole je přiřazena do i-té položky pole pole (což je pole ukazatelů (polí) na inty).

V cyklu to musíš inicializovat proto, že pole je pole ukazatelů na inty, tzn. pole[i] je ukazatel na int, který musíš před řádným použitím nasměrovat na paměť, která ti patří (a tu si opatříš tak, že ji alokuješ, třeba přes new[]).

Pojmy "pole" a "ukazatel" můžeš volně zaměňovat, protože pole je v C/C++ vlastně ukazatel na jeho první prvek... a o tom, že má i další prvky (za tím prvním) víš v zásadě jen ty (až na výjimky).

Nahoru Odpovědět
26.7.2017 22:36
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.