Skocz do zawartości

Tablice w Arduino – #2 – organizacja pamięci


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

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

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

?

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

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
(edytowany)
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

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

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

To akurat nijak się nie ma do zastosowania NULL w życiu...

 

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...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...