Skocz do zawartości

Tablice w Arduino – #2 – organizacja pamięci


Gieneq

Pomocna odpowiedź

A na przykład z powodu że nie potrzebujemy reszty z dzielenia?

I nie mów, że to można zrobić zwykłą operacją dzielenia - funkcja jest przykładowa, ale możesz sobie wyobrazić jakąś bardziej wredną funkcję operującą np. na liczbach zespolonych i przykład, gdy raz potrzebujemy części urojonej, a innym razem nie.

Dobrym przykładem jest również biblioteczna funkcja strtol, gdzie drugim parametrem może być NULL w przypadku, gdy chcemy tylko skonwertować ciąg cyfr na liczbę i nie interesuje nas co jest dalej za tymi cyframi.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

10 minut temu, SOYER napisał:

czyli mogę podawać tylko część argumentów do funkcji, ale w miejsce brakujących wpisuję NULL?


funkcja(a, b, NULL, d, NULL, f);

?

Nie, NULL to po prostu zero tylko rzutowane na nieokreślony wskaźnik 🙂

#define NULL ((void *)0)

Ten przykład wg mnie jest niepotrzebnie skomplikowany tym NULL'em dlatego Ci się miesza. Piszę to jako nieco bardziej posunięty poczatkujący.

Natomiast sama idea jest dobra, bo mówi o tym, że zwracając jedną wartość przez funkcję, korzystając z wskaźnika, można uzyskać "zwroty" dwóch wartości. Równie dobrze można by zwracać strukturę, która ma w sobie 2 zmienne, iloraz i resztę z dzielenia, ale wtedy nie poznałbyś jednego z praktycznych zastosowań wskaźnika.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

A skąd ja mogę wiedzieć? Podanie NULL to podanie NULL i dla konkretnej funkcja ma jakieś tam znaczenie; a jakie - to już zależy od funkcji. Dla strtol podanie NULL jako drugiego parametru oznacza, że ma czegoś tam nie uzywać. Dla strtok pierwszy parametr NULL oznacza "użyj danych z poprzedniego wywołania". Dla innych może to być wartość domyślna, użycie jakiejś zmiennej globalnej czy informacja, że komputer ma zaśpiewać - co tam sobie programista wymyślił.

Poza tym NULL jest całkiem prawidłowym wskaźnikiem, konkretniej na zerową komórkę pamięci, a nie jakąś magicznym "brakującym parametrem".

  • Lubię! 1
Link do komentarza
Share on other sites

22 minuty temu, SOYER napisał:

czyli mogę podawać tylko część argumentów do funkcji, ale w miejsce brakujących wpisuję NULL?



funkcja(a, b, NULL, d, NULL, f);

?

Mozesz tez wpisywac tylko czesc argumentow, a reszte nadpisywac przy wywolaniu funkcji

funkcja(a, b, c, d = NULL, f = NULL );

Wtedy jesli podasz trzy argumenty to pozostale dwa zostana nadpisane NULL'em

Edytowano przez farmaceuta
  • Lubię! 1
Link do komentarza
Share on other sites

3 minuty temu, ethanak napisał:

@farmaceuta równie dobrze można zrobić funkcję:


void funkcja (int cośtam, const char *napis = "farma", const char *napis2 = "ceuta");

 

 

Tak tak masz racje...😉 tak tylko wspomnialem o tym bo gdyby kolega @SOYER chcial robic tak jak wspomnial to ten "moj" przyklad bylby w miare ok...ale sie nie odzywam bo sam nie wiele wiem na temat tego magicznego NULL...

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.