Tablica przekazana przez referencję

0

Hej!
Dla Was to pewnie banał, ale ja nie miałem w zwyczaju używać referencji, a teraz potrzebuję.
Mam sobie kod:

double fLin(double x, double *set, double sh=0.0) {
	int	size = sizeof(set), i;
	if (x <= set[0] + sh)
		return set[1];
	for (i=2; i<size; i++) {
           //...
	}
	return (set[i-1]);
}
int main (...) {
	double	fs_cR[] = {0,1.0,  0.5,0.0};
	double	fs_cG[] = {0,0.0,  0.5,1.0,  1,0.0};
	double	fs_cB[] = {0.5,0.0,  1,1.0};

        printf("%lf\n", fLin(0.333, &fs_cR);   // linia 70
        printf("%lf\n", fLin(0.444, &fs_cG);   // linia 71
        printf("%lf\n", fLin(0.555, &fs_cB);   // linia 72
}

Jest on błędny, bo kompilator wyrzuca:

g.cpp error: cannot convert ‘double ()[4]’ to ‘double’ for argument ‘2’ to ‘double fLin(double, double*, double)’
g.cpp error: cannot convert ‘double ()[6]’ to ‘double’ for argument ‘2’ to ‘double fLin(double, double*, double)’
g.cpp error: cannot convert ‘double ()[4]’ to ‘double’ for argument ‘2’ to ‘double fLin(double, double*, double)’
Jak powinna być zdefiniowana funkcja fLin, by było poprawnie?

0

a po co ten ampersand?

0

No nie wiem. Wywaliłem i się kompiluje.
Pozostaje spr., czy działa.


Dzięki! Działa :)

0

Nie do końca jeszcze jest dobrze.
Co zrobić, by w [b]size[/b] zapisała się ilość elementów tablicy, a nie liczba 4 niezależnie od ilośći elementów?

0

Przekazać do funkcji ilość elementów. Przekazujesz WSKAŹNIK, a on nie przechowuje wiadomości o ilości elementów. On przechowuje tylko ADRES początku twojej tablicy i tyle.
sizeof(wskaznik) zawsze da ci 4, bo tyle bajtów zajmuje wskaźnik.

0

A można jakoś inaczej zdefiniować ten parametr i inaczej go przekazywać, by nie było konieczne przekazanie ilości elementów?

0

Tak, zastosowac rozwiazanie ze straznikiem (ostatni element tablicy to ustalona wartosc), tak jak np. w przypadku lancuchow znakow. Albo stworzyc klase, ktora przechowuje tablice i ilosc elementow, jak w przypadku std::string (skrot myslowy, ale jednak).

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