Przekazywanie float[][] jako referencję;

0

Witam mam metodę, która wygląda mniejwięcej tak:

 

metoda(float[][] input, float[][] output)
{
    //coś tam
}

Działać ma to tak, że na wejście wskazuję referencję do tablicy wejściowej i wyjściowej, po czym metoda po odpowiednich przekształcaniach ma zapisać wyjście w tablicy output. Kompilator zgłasza problem; chodzi pewnie o to, że tablica float[][] jako, że nie jest stricte instancją klasy tylko typem prostym nie może być w tak prosty sposób przekazana jako referencja, czy się mylę?

Jak to zrobić i czy w ogóle da się?

Próbowałem czegoś takiego:

 

metoda(float[][] input, ref float[][] output)
{
    //coś tam
}

....ale też nie działa :/

0

tablica float[][] jako, że nie jest stricte instancją klasy tylko typem prostym nie może być w tak prosty sposób przekazana jako referencja, czy się mylę?

Jak najbardziej może. Wszystkie typy tablicowe są przekazywane jako referencje. Natomiast sama referencja jest kopiowana. Jeżeli zastąpisz ją nową tablicą, zmiana nie będzie ona widoczna "na zewnątrz".
Dodając słówko kluczowe ref sprawiasz, że sama referencja przekazana jest jako referencja. Zmiana jej w ciele funkcji będzie widoczna na zewnątrz. Przykładowo, taką przekazaną, istniejącą już tablicę można powiększyć - a raczej skopiować istniejące elementy, utworzyć nową i podmienić referencje. W przypadku ref zmienna tablicowa również musi być zainicjowana.
I ostatnie, słówko out, które od ref różni się tylko tym, że zmienna tablicowa nie musi być zainicjowana.

Jeżeli nie chcesz przekazywać twojej metodzie żadnych wartości w tablicy output, to polecam właśnie to ostatnie rozwiązanie. Albo zwyczajne zwrócenie tablicy przez metodę.

0

Dziękuję :D

Dobrze mi to wyjaśniłeś, a błąd zgłaszany przez program tyczył się samego ciała metody - klasycznie ;)

Czasem debugując człowiek się wścieka i zaczyna węszyć w coraz wymyślniejszych miejscach i tak wychodzi, choć przyczyną jest pierdoła.

Kolejna nauczka by 'na gorąco' nie pytać o nic ;)

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