DOUG LLOYD: Wie Sie beginnen Arbeiten mit Funktionen,
Eine andere Sache ist los zu werden wirklich wichtig zu verstehen,
Das ist das Konzept der Geltungsbereich von Variablen.
So Umfang ist ein Charakteristik eines variablen
dass definiert, von dem Funktionen diese Variable zugegriffen werden kann.
>> Es gibt zwei Hauptbereiche in C, lokale Variablen und globale Variablen.
Erst jetzt, können lokale Variablen innerhalb der Funktionen zugegriffen werden
in dem sie erstellt.
Sie können nicht von jedem anderen zugänglich Funktion, die Sie in Ihrem Programm vorhanden ist,
nur die Funktion in der es erstellt wurde.
Globale Variablen, auf die Andererseits kann zugegriffen werden
durch Funktionen im Programm.
Und der Grund dafür ist, weil sie nicht innerhalb erstellt
einer bestimmten Funktion.
Wir erklären sie außerhalb des alle Funktionen, die
bedeutet, dass jeder weiß, wo Funktion es ist und zugreifen und manipulieren.
>> Bisher im Zuge Sie ziemlich habe sehr exklusiv Arbeits
mit lokalen Variablen.
Hier ist ein Beispiel für eine sehr, sehr einfache Hauptfunktion und eine sehr einfache
Zusatzfunktion, die wir geschrieben haben.
In diesem Fall X, die Ich habe gerade grün gefärbt
um den Ort markieren oder der Umfang dieser Variablen,
lokal zur Funktion Dreibettzimmer.
Hauptüberhaupt nicht auf x beziehen.
Er weiß nicht, was es ist.
Keine andere Funktion in der Tat, wenn man hatten zusätzliche Funktionen in hier,
könnte x beziehen.
>> In ähnlicher Weise führt die ich blau gefärbt, ist lokal nur an Haupt.
Nur Haupt weiß, was die Variable Ergebnis ist.
Dreifach kann es nicht verwenden.
>> Nun, wie ich bereits erwähnt, globale Variablen nicht existieren.
Wenn Sie diese Variable deklarieren außerhalb einer Funktion,
alle Funktionen, die in der Programm kann sich darauf beziehen.
Also in diesem Fall habe ich in hervorgehoben Grün eine globale Variablendeklaration.
In diesem Fall wird das zu deklarierenden Variable
heißt global, nur um äußerst klar darüber.
Es ist vom Typ float.
Und ich weisen Sie ihm den Wert 0,5050.
>> Sie finden, dass in der Haupt- und in bemerken triple, ich bin in der Lage, den globalen beziehen.
Und in der Tat, wenn ich durch das Programm zu gehen wie angedeutet, Haupt ersten Aufforderungen triple,
triple vermehrt global um 3, die wird sein Wert auf 1,5-something,
1.51 oder so etwas, und dann Haupt druckt auch den Wert
der globalen.
So Haupt nicht ausdrucken 0,5050, es druckt globalen Zeiten 3, 1,51.
Also muss vorsichtig sein, wenn ich Sie mit globalen Variablen arbeiten.
Während sie sehr flexibel in der Lage, Informationen weiterzugeben
um, so daß jeder Funktion benutzt werden kann,
es kann auch einige haben gefährliche Folgen
wenn man Funktionsänderungen der Wert einer Variablen
bevor Sie erwarten, dass es geändert werden.
>> Warum gibt es diese Unterscheidung wichtig?
Warum brauchen wir darum, ob einige Variablen sind lokale und andere global sind?
Nun, in den meisten Fällen, lokale Variablen in C sind, was von Wert namens geben
wenn wir einen Funktionsaufruf.
Was bedeutet das?
>> Nun, wenn eine Variable übergeben nach Wert, den Angerufenen, die
ist eine andere Art zu sagen, die Funktion daß empfängt die Variable,
wird in als Eingang geleitet, es tatsächlich nicht erhält diese Variable selbst.
Es erhält eine eigene Kopie davon, mit zu arbeiten.
Dies ist eine wirklich wichtige Unterscheidung.
Wir haben gerade vor einer Sekunde sah dass mit globalen Variablen,
wenn wir die globale manipulieren Variable in einer Funktion, die Wirkung
dadurch gekennzeichnet, dass eine Funktion trägt, durch zu jeder anderen Funktion.
>> Aber mit lokalen Variablen, Das stimmt nicht.
Jede Funktion, wenn es empfängt als Eingangsgrößen
erhalten Kopien dieser Variablen, nicht die Variablen selbst.
Also, was ist die Nebenwirkung, dass?
Das bedeutet, daß die Variable in der Anrufer, die Funktion,
macht den Funktionsaufruf ist unverändert, wenn Sie es überschreiben.
>> Zum Beispiel wird in diesem Code foo ist überhaupt nicht verändert.
Int foo gleich 4, rufen triple von foo, innen dreifach,
würden wir erwarten, dass foo würde mit 3 multipliziert und zurückgebracht werden,
aber es gibt tatsächlich keine Wirkung.
>> Hier aber, ein sehr feiner Unterschied.
Das hat auch die Wirkung, die wir wollen.
Sehen Sie, warum?
Wir zwingende foo in Haupt dieser Zeit.
>> So int foo gleich 4, gleich foo Dreifach-foo, wenn wir diesen Anruf,
Dreifach erhält seine eigene Kopie von foo, seine eigene Kopie der 4.
Er sagt, zurück 4 mal 3 oder was auch immer Variable wird in Zeiten 3 übergeben.
Und dann haben wir die Rückkehr ordnen Wert der Dreifach wieder foo.
Also eigentlich wäre foo überschreiben.
Dies ist die einzige Art und Weise zu tun, dies mit lokalen Variablen.
So, jetzt, wenn wir eine weitere hinzufügen Zeile Code hier
am Ende des Haupt um drucken Sie den Wert von foo,
es wäre in der Tat ausdrucken 12.
>> Geltungsbereich von Variablen ist in der Regel nicht zu sehr ein Problem
wenn Sie alle Ihre Namen Variablen verschiedene Dinge.
Aber es kann Art von bösen erhalten Wenn der gleiche Variablenname
erscheint in mehrfachen Funktionen, das wird eine Menge passieren.
Wenn Sie überhaupt nicht funktionieren in die reale Welt, in der
Sie kollaborative arbeiten Programme und Menschen in verschiedenen Teams
arbeiten zusammen, um das gleiche zu schreiben Programm oder den gleichen Satz von Programmen,
sie werden häufig wiederverwenden variable Namen, insbesondere gebräuchlichsten
wie x, y, i, j, und so weiter.
>> Aber als Variablen der gleiche Name, Umfang Fragen
kann ein wenig schwieriger zu analysieren.
Beispielsweise wissen Sie, was würden ausgedruckt werden
am Ende dieses speziellen Programms?
Nehmen Sie eine Minute.
Halten Sie das Video und lesen durch dieses Programm.
Sie können an der Spitze sehen wir, eine Funktionsdeklaration
für eine Funktion namens Schritt.
Diese Funktion übernimmt ein einzelnes Parameter, eine ganze Zahl, die wir als x.
Und es gibt eine ganze Zahl ist.
Das ist der Rückgabetyp zu Beginn.
>> Dann haben wir Haupt, ein paar Zeilen der Code in main, die letzte davon
ist eine print-Anweisung.
Und denken Sie daran, das ist hier die Frage.
Was ist eigentlich los zu sein am Ende dieser Funktion gedruckt?
Und dann haben wir eigentlich das Definition der Schrittweite unten.
>> So nehmen Sie eine Minute, bis Schritt der Code, Spuren Dinge aus.
Wissen Sie, was Sie bei ausgedruckt werden das Ende dieses bestimmten Programms?
>> Gut.
Hoffentlich haben Sie ein paar Sekunden aufgenommen haben zu versuchen und analysieren Sie dieses heraus.
Machen wir es zusammen.
>> Also habe ich aus Schritt gekreuzt Erklärung an der Spitze gibt.
Es war ein bisschen eine Ablenkung.
Es ist nicht seine eigenen Variablen.
Es muss nicht sein eigenes Umfang.
Es ist nur eine Funktion Erklärung, so dass für die Zwecke
zu versuchen, zu analysieren, was ist geschieht in diesem Programm,
wir könnten das auch nur vermeiden Sie es.
>> Jetzt in diesem Fall haben wir die Grund dieses Problem ist schwierig
ist, denn wir haben die lokalen Variablen in Haupt- und Schrittweite, von denen jede
ist aufgerufen x.
Und natürlich der Kern des Problems ist, versuchen, suss, welche x wird verändert
und wie funktioniert sie umziehen.
Also habe ich jede Instanz gefärbt von x, die lokal auf Haupt rot ist.
Und ich habe jede Instanz von farbigen x, das ist vor Ort zu erhöhen blau.
>> Beachten Sie in diesem dritten Zeile der Haupt, gleich y Schritt
x, ist, dass nicht in der Schrittweite bestanden die wichtigsten x, oder das rote x.
Es ist schon übergeben eine Kopie davon.
Und es ist nur gehen, um mit zu arbeiten dass Kopie davon, der blaue x.
Wenn Sie mathematisch geneigt, könnte man
haben statt dessen dachte x Unter m für Haupt- und Unter x i für die Schrittweite.
Aber es ist die gleiche Idee.
x Unter m, oder das rote X in der vorherigen Folie,
sind die Variablen, local-- sind ist die Instanz x vielmehr, dass
lokal auf Haupt- und Unter x i, oder der blau Variablen in der vorherigen Folie,
sind die Fälle von X, sind Lokal erhöhen.
>> Also, Sie waren in der Lage, herauszufinden, was diese Funktion am Ende gedruckt?
Ich bin Doug Lloyd, und dies ist CS50.