Dynamiczne tablice

0

Witam,
Dlaczego funkcja z przekazaniem **T działa poprawnie, i czy jest jakaś zasada, której budowy powinienem używać?

void wczytaj_dane(float **T, int n)
{
    for (int i=0; i<n; i++)
    {
        cout << endl << "Podaj " << i+1 << " wiersz:" << endl;
        for (int j=0; j<n+1; j++)
            cin >> T[i][j];
    }
}

void wczytaj_dane(float **tab, int n)
{
    for (int i=0; i<n; i++)
    {
        cout << endl << "Podaj " << i+1 << " wiersz:" << endl;
        for (int j=0; j<n+1; j++)
            cin >> tab[i][j];
    } 
}


//MAIN
float **tab = new float *[n];

            for(int i=0; i<n; i++)
            {
                tab[i] = new float [n+1];
            }

wczytaj_dane(tab,n);
2

Mogę jedynie zgadywać, co masz na myśli. Chodzi o to, dlaczego T działa, gdy myślisz, że musi być tab?
Argument funkcji może być dowolny (wśród poprawnych i dostępnych nazw) i nijak się ma do nazwy zmiennej, którą przekazujesz do funkcji. W szczególności nawet gdy masz

void wczytaj_dane(float **tab, int n)

to tab nie ma nic wspólnego z tym tab

wczytaj_dane(tab,n);

Zresztą pomyśl, funkcja może być wywołana dla różnych argumentów, więc chyba oczywiste jest, że nazwa argumentu nie może mieć powiązania z konkretnym wywołaniem.

2

O tym, że te nazwy nie mają zbyt wielkiego znaczenia* świadczy fakt, że przy deklaracji funkcji/metody nawet nie musisz ich podawać. Wystarczy

void wczytaj_dane( float**, int );

I dopiero w definicji przypisujesz argumentom nazwy, żeby móc z nich jakoś korzystać ;)

void wczytaj_dane( float** data, int n ) {
  ...
}
    • chyba, że korzystasz z named-parameters, ale szczerze powiem, że nawet się nie orientuję czy to już weszło do standardu czy nie.
0

@twonek: Moje pytanie nie do końca było poprawne, ale Twoja odpowiedź rozjaśniła wszystkie moje wątpliwości.

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