zwracanie tablicy
c++: c++
Funkcja przyjmująca kilka wartości a nastpnie zwracająca tablice
Niech funkcja przyjmie trzy wartości a, b, c.
W funkcji tworzy się tablica, której elementami są
a, b, c. Następnie funkcja zwraca tą tablice.
Jak taką funkcje napisać?
16 sty 15:12
Kamil: załóżmy że a,b,c są całkowite.
int* zwroc(int a, int b, int c){
int tab[3];
tab[0]=a;
tab[1]=b;
tab[2]=c;
return tab;
}
16 sty 15:18
c++: dziękuję!
a jak teraz korzystać z tej tablicy?
np. w funkcji main żeby wpisać do tablicy to co ta funkcja zwróciła
int tablica[3] = zwroc(1,2,3)
16 sty 16:27
c++: jakby jednak ktoś chciał odpowiedzieć to podbijam
18 sty 09:55
jc: To tak nie działa.
1. Możesz do funkcji przekazać adres tablicy, a funkcja wypełni odpowiednio tablicę.
void f(int tab[]){
tab[0]=... ; tab[1]=... ; tab[2]=... ;
}
2. Możesz przekazać funkcji 3 adresy/referencje (to prawie to samo co rozwiązanie 1).
3. Możesz zdefiniować odpowiednią klasę lub strukturę zawierającą trzy pola.
Wtedy funkcja będzie mogła przekazać 3 wartości naraz.
4. Możesz wykorzystać już zdefiniowaną klasę (poszukaj sobie).
18 sty 10:07
Dziadek Mróz:
#include <iostream>
int *fun1(int a, int b, int c) {
static int tab[3];
tab[0] = a;
tab[1] = b;
tab[2] = c;
return tab;
}
int *fun2(int a, int b, int c) {
int *tab = new int[3];
tab[0] = a;
tab[1] = b;
tab[2] = c;
return tab;
}
int main() {
int *tab1 = fun1(1, 2, 3);
for (int i=0; i<3; i++) {
std::cout << " " << *(tab1+i);
}
std::cout << std::endl;
int *tab2 = fun2(4, 5, 6);
for (int i=0; i<3; i++) {
std::cout << " " << *(tab2+i);
}
std::cout << std::endl;
// delete tab1; // bo tab1 nie bylo tworzone dynamicznie tylko statycznie
delete tab2;
return 0;
}
C++ nie zezwala zwracać pamięci lokalnych zmiennych, więc mamy tu static, druga wersja to
dynamiczna tablica i delete na końcu
18 sty 15:20