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



Teraz jest 21 wrz 2024, o 15:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 1 cze 2017, o 16:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Witam niejasność dotyczącą strony 75 w BB gdzie pisze cytuje

Cytuj:
Bardzo istotną i pozytywną cechą języka C jest to , że mamy możliwość definiowania zmiennych w locie.
Cóż to oznacza ? Najpierw odwołam się do innych języków , być może miałeś możliwość poznania wcześniej niektórych .Okazuje się bowiem , że najczęściej w innych językach występuje konieczność definiowania zmiennych na początku bloku kodu programu lub bloku funkcji itp. Na szczęście w języku C nie ma takich ograniczeń, co oznacza , że możemy definiować zmienne w dowolnym miejscu kodu programu.


1.Jednakże zdefiniować zmiennej lokalanej wewnątrz pętli nie możemy ponieważ trzeba zrobić to tuż przed dlaczego ?

2.czy jeśli umieszczę w pętli niżej definicje zmiennej to czy z każdym powrotem do góry pętli będzie ona tworzona od nowa ?

3.Co z widocznością takiej zmiennej w pętli pod pętlą, czy będzie ona widoczną skoro znajduje się w ciele pętli?

czemu tak
Kod:
 int main(void)
        {
            uint8_t  x, a = 11; // zdefiniowanie zmiennych w funkcji głównej main


                while(1)
                   {
                     
                         x = a+5; // operacja dodania do siebie zmiennej a i liczby 5 , zapisanie do zmiennej x wyniku

                    }
         }


a nie tak skoro z książki wynika co innego przynajmniej tak pisze na stronie 75.

Kod:
  while(1)
     {
           uint8_t  x , a = 11; // zdefiniowanie zmiennych wewnątrz pętli

                       x= a+5; // operacja dodania do siebie zmiennej a i liczby 5 , zapisanie do zmiennej x wyniku
      }




nie rozumiem dlatego proszę o objaśnienia klarujące moje myśli Dziękuje :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 17:28 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27294
Lokalizacja: Szczecin
Pomógł: 1041

procek87 napisał(a):
1.Jednakże zdefiniować zmiennej lokalanej wewnątrz pętli nie możemy ponieważ trzeba zrobić to tuż przed dlaczego ?

No podajesz cytat z książki a piszesz jakieś dziwne wnioski ? Że niby dlaczego nie możemy ? kto ci tak powiedział ? Pewnie że możemy wewnątrz pętli
procek87 napisał(a):
2.czy jeśli umieszczę w pętli niżej definicje zmiennej to czy z każdym powrotem do góry pętli będzie ona tworzona od nowa ?

Tak
procek87 napisał(a):
3.Co z widocznością takiej zmiennej w pętli pod pętlą, czy będzie ona widoczną skoro znajduje się w ciele pętli?

Pewnie że będzie widoczna pod pętlą - co to ma za znaczenie ? patrz na to liniowo

UWAGA! czerwony kolor zarezerwowany jest dla moderatorów - proszę go nie używać w swoich postach

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 18:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

czerwony aha ok będę pamiętał ;)

dlaczego więc z każdym obiegiem pętli zmienna jest na nowo zapisywana tworzona i zapisywana jakąś wartością a jeśli ją utworzymy w ciele funkcji main to jest tworzona raz i koniec ,

tworzę zmienną a inicjuje ją linijka niżej zwiększam ją o jeden gdzie kolejno pętla zawraca i tworzy na nowo zmienną a, już nie z zawartością 1 a 0,

Kod:
while(1){

     uint8_t a=0;
     a++;
}


gdzie w funkcji main sprawa wygląda inaczej bo tam kompilator raz utworzy zmienną i nie będzie ją tworzył kolejno od nowa bo przecież main to nie pętla nieskończona.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 18:37 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27294
Lokalizacja: Szczecin
Pomógł: 1041

procek87 napisał(a):
dlaczego więc z każdym obiegiem pętli zmienna jest na nowo


No weź sam pomyśl ;) masz w C wolną amerykankę, więc skoro tworzysz ją wewnątrz pętli to ZA KAŻDYM jej obiegiem musi zostać utworzona ... nie chcesz tego zjawiska? utwórz że ją przed pętlą główną albo za... pętlą główną ... w czym probliem ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 18:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

@procek87 :)
procek87 napisał(a):
tworzę zmienną a inicjuje ją linijka niżej zwiększam ją o jeden gdzie kolejno pętla zawraca i tworzy na nowo zmienną a, już nie z zawartością 1 a 0,

Jeżeli chcesz by zmienna nie inicjowała się wewnątrz ciągle za każdym razem,
to poczytaj o przedrostku static .
Widzę że masz BB. ;) Są przykłady w przerwaniach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 19:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

procek87 napisał(a):
utwórz że ją przed pętlą główną albo za... pętlą główną ... w czym probliem ?


Mirku napisałeś "przed pętlą główną" main rozumiem że miałeś na myśli zmienną globalną ?
a pisząc za pętlą główną co miałeś na myśli?

Dziekuję za tłumaczenie jestem początkujący ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 19:40 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27294
Lokalizacja: Szczecin
Pomógł: 1041

procek87 napisał(a):
Mirku napisałeś "przed pętlą główną" main rozumiem że miałeś na myśli zmienną globalną ?


Ja widzę że ty mylisz pojęcia, dla ciebie "pętla główna" to to samo co "funkcja main()" ? Z tego co piszesz wydaje się, że tak. A to błąd.

Funkcja to funkcja ....

natomiast w każdej funkcji może być pętla albo i wiele pętli ;) Przy czym mówi się, że w funkcji main() występuje tzw pętla nieskończona

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 19:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

w każdej funkcji main() kryje się pętla nieskończona przecież taka pętla nigdy nie zawróci ? nie rozumiem dlaczego pętla nieskończona to się ni jak mam praktyki



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 cze 2017, o 08:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

mirekk36 napisał(a):
Przy czym mówi się, że w funkcji main() występuje tzw pętla nieskończona


czy mówi się tak symbolicznie czy serio jest tak że main działa jak pętla w co wątpię ale pytam z ciekawości początkującego .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 cze 2017, o 08:45 
Offline
Użytkownik
Avatar użytkownika

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

main() nie działa jak pętla. main() jest funkcją.
Natomiast, w funkcji main() znajduje się pętla while(1){}, która wykonuje się w kółko tak długo, aż wartość w nawiasach (w tym przypadku "1") osiągnie zero. Ponieważ jest tam na stałe wpisana wartość 1, więc ta pętla będzie się wykonywała w nieskończoność.



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: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 16 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