Funkcja z instancją, co to właściwie

0

Hej,
Muszę w zadaniu napisać funkcje która:
screenshot-20230403193810.png
Proszę jedynie o odpowiedź:
W jaki sposób działa argument funkcji tak właśnie wyglądający jak powyżej, mi brakuje tam nazwy zmiennej, zawsze miałem coś w stylu int funkcja(int* x) na przykład, a wcześniej nie miałem styku z int funkcja(int* ) nie rozumiem co tak właściwie podaje funkcji do przemielenia, domyślam się oczywiście że wskaźnik ale wskaźnik czego?

0

Jak dostaniesz ten pointer to możesz poruszać się po tej pamięci. Mało tu wiadomo ale załóżmy że na końcu pamieci masz \0 no to jak to jest char *pos. To będziesz szedł sobie pos++ i sprawdzaił czy *pos == '\0'. I zwracasz jako odpowiedź jako *int bo znalazłeś. castujesz char * do int * co już rodzi problem, bo po pierwsze jak wejdziesz w ten int to moze się okazać, że siedzisz w nie swojej pamięci. Oraz jak niby dopilnujesz strict aliasing ? W ogóle nie jestem pewien czy dobrze rozumiem o co pytasz.

0

Dostaje wskaźnik na memory_sector_t - pytanie co to jest za struktura? Google nie wydaje się tego znać.

0

Nazwa zmiennej nie jest obowiązkowa przy deklaracji funkcji. Podajesz wskaźnik na memory_sector_t

1

Podaj całą treść zadania bo może są tam istotne detale których nie dostrzegasz a są ważne dla problemu ;)

0

Tak naprawdę w tym momencie zastanawia mnie jedynie czy argument funkcji: memory_sector_t * = memory_sector_t * x
W skrócie mam rozumieć że to jednoznaczne czy niesie ze Sobą jakieś ograniczenia nie podanie nazwy do struktury w argumencie
Ponieważ mam dla przykładu mam zadeklarowane dwie funkcje które mam rozpisać w tym zadaniu:

void initialize_memory(memory_sector_t *);

address_status_t validate_address(memory_sector_t * memory_sector, const int * address);

I jedna posiada jak widzicie nazwę do struktury w argumencie a druga nie.
Więc zastanawia mnie różnica w podawaniu tych argumentów

Bo idąc tokiem że to jedno i to samo, tak jak jedna z osób napisała powyżej to jak mam się do tego odwołać w kodzie funkcji?

0
typedef struct memory_sector {        
	int l_fence;                         
	int buffer[sector_size];             
	int r_fence;                           
} memory_sector_t;

Tak wygląda w skrócie struktura

0

Kolego jedno to jest deklaracja funkcji druga definicja.

Mamy taką sytuację main.c ex.c ex.h - trzy pliki.
Ty masz main.c i ex.h w ex.h masz deklaracje
a ktoś ma ex.h i ex.c w ex.c on ma definicje

main.c includuje ex.h który posiadasz.
Ale nie posiadasz ex.c
Ktoś posiada ex.c i ex.h zrobił cc -c ex.c i otrzymał ex.o
Dał ci ex.o
Ty robisz cc -c main.c
Następnie cc main.o ex.o -o program

A jak on sobie tą zmienną którą przekazujesz nazwie to jego problem.

A autor moze isć jeszcze dalej i dac Ci do ręki
Zapomnijmy o C23 w każdym razie obecnie to oznacza że coś tam będzie brane. I tego się trzymamy, obecna wersja jest przyjemniejsza
I dostaniesz manula i sobie doczytasz co. Może przekazujesz jedną zmienną może dwie etc...

0

Możesz pominąć nazwę parametru funkcji w deklaracji. W definicji musisz ją podać.

Czyli:

// deklaracja, nazwa parametru nie jest wymagana
void foo(int *);

// definicja, musisz podać nazwę parametru
void foo(int * bar) 
{
  // ...
}

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