Przekazywanie do funkcji

0
void show(A**& tab, size_t n)
{
    for (size_t i = 0; i < n; i++)
    {
        cout << tab[i]->get() << endl;
    }
}

int main()
{
    size_t n = 10;
    A** tab;

    show(tab, n);
    return 0;
};

Wyjaśni mi ktoś, dlaczego przy przekazywaniu tablicy wskaźników na obiekty do funkcji globalnej musimy to zrobić za pomocą **&? Czy jest jakiś inny sposób?

1

W tym kodzie referencja jest kompletnie zbędna. Ale prawdopodobnie powinieneś przeczytać Przekazywanie parametru przez wartość i referencję

0

No dobrze, w takim razie czy mógłbyś pokazać mi jak to zrobić bez zbędnej referencji?

1
void show(A** tab, size_t n)
{
    for (size_t i = 0; i < n; i++)
    {
        cout << tab[i]->get() << endl;
    }
}

int main()
{
    size_t n = 10;
    A** tab;
    // inicjalizacja tab
    show(tab, n);
    return 0;
};
0
#include "stdafx.h"
#include <iostream>

using namespace std;

class A {
    int atrybut;

public:
    A() {
        atrybut = 10;
    }

    int get() {
        return atrybut;
    }

    void set(int x) {
        atrybut = x;
    }
};

void create(A** tab, size_t n)
{
    tab = new A*[n];
    for (size_t i = 0; i < n; i++)
    {
        tab[i] = new A;
    }
}

void show(A** tab, size_t n)
{
    cout << endl;
    for (size_t i = 0; i < n; i++)
    {
        cout << tab[i]->get() << endl;
    }
}

void set(A** tab, size_t n)
{
    for (size_t i = 0; i < n; i++)
    {
        tab[i]->set(20);
    }
}

void remove(A** tab, size_t n)
{
    for (size_t i = 0; i < n; i++)
    {
        delete tab[i];
    }

    delete[] tab;
}

int main()
{
    size_t n = 10;
    A** tab;

    create(tab, n);
    show(tab, n);
    set(tab, n);
    show(tab, n);
    remove(tab, n);

    getchar();
    return 0;
};

Cały kod. W tej sytuacji to się nawet nie kompiluje.

2

Koniecznie przeczytaj:
Przekazywanie parametru przez wartość i referencję
https://dsp.krzaq.cc/post/176[...]xx-kiedy-uzywac-new-i-delete/

Kompilować to się kompiluje: https://wandbox.org/permlink/RQYvfixkONfwqEPM
Problemem jest to, że przekazujesz wskaźnik przez wartość i go zmieniasz, oczekując że zmieni się oryginał (pierwszy link).

0

Okej, dziękuje bardzo za pomoc.

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