Rafal9018 napisał(a):
Witam,
panowie, czy mógłby ktoś mi łopatologicznie wytłumaczyć co się dzieje w tej funkcji ??
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po mojemu to wpisujemy jakiś ciąg znaków np "test". Więc w pętli while zaczynamy inkrementować zmienna s i wysyłać każdą literkę z wpisanego tekstu przez funkcję uart_put. Ale dlaczego jest tam wskaźnik ?? i dlaczego bez tego wskaźnika, nie działa taka funkcja ??
Generalnie wiem, że kłaniają się tutaj wskaźniki. Wiem co to jest, ale do dnia dzisiejszego nie wiem kiedy je stosować
Proszę o zrozumienie i ewentualne wytłumaczenie tematu

Do tej funkcji przekazywany jest wskaźnik na tablicę (on zajmuje dwa bajty) zamiast całej tablicy (czyli długośc całego tekstu plus znak zera na końcu). Dlatego przekazuje się wskaźnik, by zaoszczędzić czas i miejsce na stosie. No dobrze, w funkcji masz do dyspozycji wskaźnik na tablicę, czyli tak naprawdę adres jej pierwszego elementu (on ma numer zero, pamiętaj). Literka 's' oznacza adres (w tym przypadku początku tablicy), ale jeśli użyjemy zapisu '*s', otrzymamy zawartość komórki pamięci, na którą wskazuje s. Jeśli więc wywołujesz funkcję np. tak: uart_puts("test"); s oznacza adres pierwszego elementu tablicy zawierającej napis test, ale żeby odczytać zawartość pierwszego pola, Mirek zastosował *s. Potem, po odczytaniu pola, następuje zwiększenie adresu wskaźnika o jeden element ( czyli s++). Od tej pory wskaźnik wskazuje na kolejny element tablicy, czyli na literkę e. I taki schemat powtarza się w pętli while dopóki odczytanie zawartości spod *s nie napotka na koniec łańcucha znaków, czyli zero. Wtedy pętla jest przerywana i wylatujemy z funkcji, bo nie ma już nic więcej do roboty. Poczytaj na spokojnie bluebook, ewentualnie poszperaj w sieci, bo informacji na ten temat jest całkiem sporo. Gdy już poczujesz się na siłach, płatny kurs na pewno nie zaszkodzi, a na pewno więcej z niego zrozumiesz i zapamiętasz. Pozdrawiam