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



Teraz jest 28 mar 2024, o 16:54


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 ]
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: 1146
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 3 gości


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