Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 20 maja 2025, o 13:43


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 13 sty 2018, o 23:50 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    Mam pewną zagwostkę. w kodzie:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    jest jedna funkcja, która zwraca wynik uint8_t, ale nie przyjmuje argumentu (przynajmniej ja tak to rozumiem), ponieważ na końcu w nawiasie jest void. To jak to jest,że jednak przyjmuje argument wyciągany z tablicy? Tak na mój chłopski rozumek, skoro coś przyjmuje, nawet jeśli jest to kolejny element tablicy, to w deklaracji i w samej nazwie funkcji zamiast viod między nawiasami powinna być nazwa tablicy. o np tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 sty 2018, o 23:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2017
    Posty: 140
    Pomógł: 6

    Nein, nein, nicht, nicht w nawiasie masz to co do niej przekazujesz, przed nawiasem to to Ci fukcja oddaję. Czyli nie przekazujesz do niej nic, a ona zwraca uint8_t. Czyli w tym miejscu
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    zamiast zapal() "wpisywane" jest to co zwraca Ci funkcja.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 sty 2018, o 23:57 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    no ok, ale jakoś musi się dostać do funkcji element z tablicy. To się nie nazywa przekazywaniem argumentu do funkcji?

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 00:00 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2017
    Posty: 140
    Pomógł: 6

    Tablicę masz na samej górze, więc jest ona globalna - dostępna wszędzie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 00:03 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    a widzisz. to mi teraz pokolorowałeś. :) kumiem to teraz :). Ale to znaczy,że argumenty przekazywane do funkcji nie są globalne?

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 00:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2017
    Posty: 140
    Pomógł: 6

    To nie pokolorowałem do końca :D

    Rezultat funkcji (to co jest po returnie) to to, co zastępuję wywołanie funkcji, w twoim przypadku PORTC = rezultat.
    Argument funkcji (to co wpisujesz w nawiasie - funkcja(argument) ) i jest używane wewnątrz niej, np:

    uint8_t funkcja(uint8_t argument)
    {
    return argument+2;
    }

    Czyli jeżeli użyjesz PORTC = fukcja(2);
    to PORTC będzie równy 4 :)


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 00:21 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    dzięki ;)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 01:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1170
    Lokalizacja: Kraków
    Pomógł: 93

    wojciechgorzolka napisał(a):
    Ale to znaczy,że argumenty przekazywane do funkcji nie są globalne?
    Właściwie to niekoniecznie. Nie wiem, czy potrafię to wyjaśnić, ale spróbuję:
    1) zmienne do funkcji można przekazać przez wartość. Czyli:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    Wtedy wewnątrz funkcji tworzona jest kopia zmiennej przekazanej do funkcji (przekazujesz tylko WARTOŚĆ do funkcji)
    2) zmienne można też przekazać przez referencję. Zapisując
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    przekazujesz do funkcji ADRES zmiennej. Wszystkie operacje wykonywane wewnątrz funkcji będą miały wpływ na zmienną, która może być lokalna w innej funkcji (ponieważ zmiany zapisujesz w tym samym miejscu w pamięci).
    3) tablice zawsze przekazywane są przez referencję. Tak naprawdę przekazując tablicę, przekazujesz ADRES jej pierwszego elementu
    4) jest jeszcze taki dziwny sposób, dookoła. Jeżeli utworzysz zmienną jako globalną w pliku programu, to wewnątrz funkcji możesz zmieniać jej wartość, mimo, że nie została przekazana do funkcji jako argument. Ale z tym należy uważać, bo można sobie namieszać w programie.

    Pamiętaj też, że istnieje coś takiego jak przesłanianie nazw zmiennych. Jeżeli utworzysz zmienną globalną, a w jakiejś funkcji utworzysz zmienną o takiej samej nazwie (nie pamiętam, czy typ też musi być taki sam!), to wszystkie operacje w tej funkcji wykonujesz na zmiennej lokalnej, zdefiniowanej w funkcji.

    Się spisałem ;) jeśli to pomoże w zrozumieniu przekazywania argumentów, to fajnie. Jeśli coś namieszałem, proszę bardziej doświadczonych kolegów o korektę.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 11:45 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ok, dzięki. nie jest to lekki temat. Faktycznie jest tak jak piszesz z tablicami, bo ostatni czytałem o tym w bb na temat wskaźników ( chyba tam to było opisane) . Muszę dużo ćwiczyć pisanie kodu z funkcjami, to w końcu mi to wejdzie do makówki.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO