Hej,
Muszę w zadaniu napisać funkcje która:
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?
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.
Dostaje wskaźnik na memory_sector_t
- pytanie co to jest za struktura? Google nie wydaje się tego znać.
Nazwa zmiennej nie jest obowiązkowa przy deklaracji funkcji. Podajesz wskaźnik na memory_sector_t
Podaj całą treść zadania bo może są tam istotne detale których nie dostrzegasz a są ważne dla problemu ;)
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?
typedef struct memory_sector {
int l_fence;
int buffer[sector_size];
int r_fence;
} memory_sector_t;
Tak wygląda w skrócie struktura
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...
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)
{
// ...
}