DOUG LLOYD: Jak zacząć pracy z funkcji,
inna sprawa stanie się bardzo ważne, aby zrozumieć,
które to pojęcie zmiennym zakresie.
Tak więc zakres jest charakterystyczny dla zmiennej
który określa z jakiego funkcji że zmienne mogą być dostępne.
>> Istnieją dwa podstawowe zakresy w C, zmienne lokalne i zmienne globalne.
Teraz, zmienne lokalne mogą jedynie można uzyskać w ramach funkcji
w którym są one tworzone.
Nie mogą one być dostępne dla każdego innego Funkcja, która istnieje w programie,
tylko funkcja w których został stworzony.
Zmienne globalne, az z drugiej strony, można uzyskać
o dowolnej funkcji w programie.
A powodem tego jest ponieważ nie są tworzone wewnątrz
od konkretnej funkcji.
Deklarujemy je poza wszystkich funkcji, które
Oznacza to, że każda funkcja wie gdzie jest i ma dostęp i manipulowanie nim.
>> Do tej pory w toku masz dość dużo pracuje wyłącznie
ze zmiennymi lokalnymi.
Oto przykład z bardzo, bardzo Prosta funkcja głównym i bardzo prosta
Dodatkowa funkcja pisaliśmy.
W tym przypadku, X, która Mam kolor zielony po prostu
aby podświetlić lokalizację lub zakres tej zmiennej,
jest lokalna dla funkcji potrójnego.
Głównym nie może odnosić się do x w ogóle.
Nie wiem co to jest.
Żadna inna funkcja, w rzeczywistości, jeśli będziemy miał dodatkowe funkcje tutaj,
może odnosić x.
>> Podobnie wyniki, które mam w kolorze niebieskim, jest lokalny tylko głównym.
Tylko Głównym wie co wynik zmienna jest.
potrójne nie można go używać.
>> Teraz, jak już wspomniałem, istnieją zmienne globalne.
Jeśli zadeklarujesz tej zmiennej poza jakąkolwiek funkcji
wszystkie funkcje w Program może odnosić się do niego.
Więc w tym przypadku mam podświetlone na zielony deklaracji zmiennej globalnej.
W tym przypadku zmienne zadeklarowane
nazywany jest globalny, po prostu być bardzo jasne o tym.
Jest typu float.
I przypisać jej wartość 0.5050.
>> Zauważysz, że w głównym oraz w potrójne, jestem w stanie odnieść się do globalnego.
I rzeczywiście, jeśli pójdę za pośrednictwem programu jak wskazano, główne pierwsze zaproszenia potrójne,
trzyosobowe mnoży globalne przez 3, które określa jej wartość na 1,5-coś,
1.51 czy coś takiego, a następnie głównym wypisuje także wartości
globalnego.
Tak więc głównym nie będzie go wydrukować 0.5050, będzie wydrukować razy globalnych 3, 1.51.
Więc musisz być ostrożny, gdy pracujesz z zmiennych globalnych.
Choć są bardzo elastyczne, jest w stanie przekazać informacji
około tak, że każda Funkcja może go używać,
to również może mieć pewne niebezpieczne konsekwencje
w przypadku zmiany jednego funkcyjnych wartość zmiennej
przed oczekiwać, iż zostanie zmieniony.
>> Dlaczego ta różnica ma znaczenie?
Dlaczego obchodzi, czy niektórych zmiennych są lokalne i inni są globalne?
Cóż, w przeważającej części, zmienne lokalne w C są co nazywa przekazywane przez wartość
gdy robimy wywołanie funkcji.
Co to znaczy?
>> Więc, gdy zmienna przepuszcza przez wartość, wywoływany, który
jest innym sposobem na powiedzenie funkcji które otrzymuje zmienną, która
zostanie przekazany jako wejście, to faktycznie nie otrzymuje tej samej zmiennej.
Otrzymuje własny kopia pracować.
Jest to naprawdę bardzo ważne rozróżnienie.
Po prostu zobaczył drugą temu że ze zmiennych globalnych,
jeśli manipulować światowy zmienna w funkcji jednej efekt
że jedna funkcja nosi aż do każdej drugiej funkcji.
>> Ale ze zmiennych lokalnych, to nie jest prawda.
Każda funkcja, gdy go otrzymuje zmienne jako wejście
otrzymać kopie tych zmiennych, nie same zmienne.
Więc co jest efektem ubocznym, że?
Oznacza to, że zmienny rozmówcy, funkcja, która
co jest wywołanie funkcji, jest bez zmian, chyba że go nadpisać.
>> Na przykład, w tym kodzie foo nie jest w ogóle zmieniło.
Int foo równa się 4, zadzwoń potrójne foo, wewnątrz potrójne,
spodziewamy się, że foo będzie należy pomnożyć przez 3 i wrócił,
ale tam naprawdę nie ma wpływu.
>> Tutaj jednak bardzo subtelna różnica.
To ma wpływ chcemy.
Czy widzisz, dlaczego?
Jesteśmy głównym nadrzędne foo w tym czasie.
>> Więc int foo równa się 4, foo równa potrójne foo, gdy robimy to wezwanie,
potrójne dostaje własną kopię foo, własnej kopii 4.
Mówi powrócić 4 razy 3, czy cokolwiek Zmienna zostanie przeniesiony w czasie 3.
I wtedy możemy przypisać do zwrotu Wartość potrójne ponownie foo.
Więc to rzeczywiście byłoby zastąpienie foo.
Jest to jedyny sposób, aby zrobić to ze zmiennej lokalnej.
Więc teraz, jeśli dodamy kolejny linia kodu tutaj
pod koniec głównego, aby wydrukować wartość bla,
to w rzeczywistości wydrukować 12.
>> Zmienny zakres jest na ogół nie jest zbyt wielkim problemem
jeśli wymienić wszystkie swoje zmienne różnych rzeczy.
Ale to może dostać rodzaju paskudne w przypadku tej samej nazwie zmiennej
pojawia się w wielu funkcji która stanie się dużo.
Jeśli kiedykolwiek działają w prawdziwy świat, gdzie
pracujesz na współpracy programy i ludzie w różnych zespołach
Pracujemy razem, aby napisać to samo program lub ten sam zestaw programów,
oni często ponowne zmienną nazwy, szczególnie spotykane
jak x, y, i, j, i tak dalej.
>> Ale gdy zmienne mają ta sama nazwa, kwestie zakres
może być trochę trudniejsze do analizy.
Na przykład, czy wiesz, co będzie drukowane
Na koniec tego konkretnego programu?
Poświęć chwilę.
Zatrzymaj wideo i przeczytaj w ramach tego programu.
Możesz zobaczyć na najwyższym my posiadają deklarację funkcji
dla funkcji o nazwie przyrostu.
Że funkcja przyjmuje pojedynczy Parametr, liczbą całkowitą, co nazywamy x.
I wyprowadza liczbę całkowitą.
To typ zwracany na początku.
>> Następnie mamy główny, kilka linii kodu w głównym, z których ostatni
Jest to instrukcja print.
I pamiętaj, że tu jest pytanie.
Co jest w rzeczywistości będzie wydrukowany na końcu tej funkcji?
I wtedy rzeczywiście mają Definicja przyrostu poniżej.
>> Więc poświęć chwilę, krok po kroku kod, rzeczy prześledzić.
Czy wiesz, co zostanie wydrukowana Koniec tego konkretnego programu?
>> W porządku.
Mamy nadzieję, że podjęliśmy kilka sekund próbować analizować ten jeden.
Zróbmy to razem.
>> Tak już przekreślone przyrost na Deklaracja na tam na górze.
To był rodzaj szaleństwa.
To nie jest jego własny zmienny.
Nie posiada własnego zakresu.
To tylko funkcja Deklaracja, więc dla celów
próbować analizować co nowego dzieje się w tym programie,
równie dobrze możemy po prostu uniknąć.
>> Teraz mamy w tym przypadku, Przyczyną tego problemu jest trudne
jest, ponieważ mamy zmienne lokalne w główny i przyrostu, z których każda
nazywa się x.
I oczywiście sedno tego problemu jest próbuje rozpracować którym x ulega zmianie
i jak to się zmieniło.
Więc mam kolorowe każde wystąpienie x to lokalne do głównej czerwieni.
A ja kolorowe każde wystąpienie x to lokalny, aby zwiększyć niebiesko.
>> Zawiadomienie w tej trzeciej linii z głównym, y jest równa przyrost
x, że przyrost nie jest przeszedł Main x lub czerwony x.
Jest coraz przeszedł jego kopię.
I to dzieje się tylko do pracy z że kopia, niebieski x.
Jeśli jesteś matematycznie skłonni to polubisz
zamiast tego myślałem o tym jako x sub m dla głównego i X sub I dla przyrostu.
Ale to jest ten sam pomysł.
x sub m, lub czerwone iksy w poprzednim slajdzie,
są zmienne, które są local-- jest wystąpienie x raczej, że
jest lokalny głównym, a x sub i, lub Zmienne niebieskie w poprzednim slajdzie,
są przypadki x, że są lokalne, aby zwiększyć.
>> Tak, byłeś w stanie dowiedzieć się, co funkcja ta drukowana na końcu?
Jestem Doug Lloyd, i to jest CS50.