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/ucze-sie-cxx-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