Jak zwrócić tablicę z funkcji i przypisać ją do zmiennej w main-ie?

0

Witam. Pracuję nad programem na uczelnie - i mam mały problem - podejrzewam, że brak wiedzy - nie mogłem znaleźć odpowiedzi pod frazami, którymi wyszukiwałem w gogle.

A więc krótko - piszę funkcję do mnożenia macierzy przez wektor - funkcja typu float, przyjmuje dwa argumenty typu float i ma zwracać tablice (trzy elementową) typu float.

float f(float tab1[3][3], float tab2[3])
{
    float tab3[3];
    for(int w=0;w<=2;w++)
    {
        tab3[w] = 0.0;
        for (int k=0; k<=2;k++ )
        {
            tab3[w]+=(tab1[w][k]*tab2[k]);
        }
    }
    return tab3[3]; // dajac return tab3; otrzymywałem błąd kompilatora, iż error: cannot convert 'float*' to 'float' in return
}

W mainie mam:

float A[3];
float T[3][3];
float Ap[3];
Ap=f(T,A)

I otrzymuje błąd:

error: cannot convert 'float' to 'float (*)[3]' for argument '1' to 'float f(float (*)[3], float*)'

pytanie brzmi - jak zwrócić tablicę z funkcji - oraz jak przypisać wynik tej funkcji do tablicy w mainie.

Dodam iż tablica zwracana ma być jednowymiarowa trzy elementowa.

Prosił bym o pomoc - dziękuje.

dodanie znacznika <code class="cpp"> - @furious programming

1

Funkcje C++ nie mogą zwracać tablicy przez wartość. Poczytaj sobie o zwracaniu przez referencję.

2

Opakuj to ładnie w klasy, bedziesz mieć niwersalnie. Od biedy klasę przez wartość możesz zwrócić. A jeśli nie chcesz - to użyj std::vector<>

2

Operuj na std::vector/std::array i wszystko będzie dozwolone.

2
return tab3[3];

Nie oznacza zwrócenie całej tablicy, jednakże elementu nr 3(w tej tablicy i tak go nie mamy).

Zwracanie tablicy powinno odbywać się przez wskaźnik. Jednakże musimy pamiętać, że jeśli z adresu korzystamy w dalszej części programu wówczas, nie możemy się odnosić do adresu pokazującego na lokalną tablicę stworzoną w funkcji.

dodanie znacznika <code class="cpp"> - @furious programming

0

Dziękuje bardzo za pomoc, rozwiązałem to tak:

void f(float tab1[3][3], float tab2[3],float Ap[])
{
    for(int w=0;w<3;w++)
    {
        Ap[w] = 0.0;
        for (int k=0; k<3;k++ )
        {
            Ap[w]+=(tab1[w][k]*tab2[k]);
        }
    }
} 

Działa tak jak sobie założyłem. W razie problemów będę próbował z vector'em ;)

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