Jak działa funkcja typu *nazwa_funkcji() = [liczba całkowita]? Proszę o pomoc w napisaniu funkcji, która to wykorzystuje.

0

Hej,

Byłbym bardzo wdzięczny, gdy ktoś był w stanie napisać mi funkcję do tego prostego zadania umieszczonego w załączniku. Zadanie jest banalne, ale problem jest w tym, że pierwszy raz na oczy widzę zapis typu *nazwa_funkcji() = [liczba całkowita], w tym przypadku *rng() = 7 i nie wiem kompletnie jak się za to zabrać. Gdybym mógł to zrobić na funkcji z parametrami to nie byłoby najmniejszego problemu.

Treść zadania w załączniku.

Z góry dziękuję za pomoc :D

1

@Dande a czy zapis:

int *a = rng();

*a = 7;

jest czytelniejszy? Jak tak, to to jest dokładnie to samo (logicznie).

0

@hauleth: Jak rozumiem jest tu deklaracja nowego wskaźnika typu int o nazwie a i przypisywana jest mu dokładnie taka sama wartość co rng().
Po wyłuskaniu poprzez *a dostajemy wartość pod wskazaną pozycją, czyli 7.

Wydaje mi się, że rozumiem, ale brakuje mi tu możliwości zobaczenia tego na przykładzie i raczej nie byłbym w stanie napisać poprawnej funkcji do tego programu.

1
Dande napisał(a):

@hauleth: Jak rozumiem jest tu deklaracja nowego wskaźnika typu int o nazwie a i przypisywana jest mu dokładnie taka sama wartość co rng().
Po wyłuskaniu poprzez *a dostajemy wartość pod wskazaną pozycją, czyli 7.

Wydaje mi się, że rozumiem, ale brakuje mi tu możliwości zobaczenia tego na przykładzie i raczej nie byłbym w stanie napisać poprawnej funkcji do tego programu.

Generalnie napisanie funkcji C zwracającej wskaźnik, ambitniejszej niż szkolne demo, jest niebanalne. Nie tyle przez kod, bo jest łatwy, ile przez DOKŁADNE udokumentowanie założeń
a) albo wskaźnik powstał przez malloc -> musi być zzwolniony przez kod kliencki
b) albo wskaźnik do obszaru statycznego -> zwykle tzreba uważać na wątki, czas aktualności statycznego bufora itd...
c) w nowszych dialektach/wersjach języka zwraca const lub nie
d) jeszcze inne kombinacje
zarówno a) jak i b) szeroko występują w bibliotece standardowej

Demo jest proste

int * fun(){
 static int buf;
return &buf.
}

Sam sobie rozpoznaj, który to wariant

0

@AnyKtokolwiek: Dziękuję mocno za demo. Dzięki niemu udało mi się to zrobić :D

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