Wollte kurz mal fragen was den der Unterschied zwischen diesen beiden Schreibweisen ist. Was ändert sich da in Bezug auf die Variable x? int x=0; int main(void){ ... } int main(void){ int x=0; ... }
Im ersten Fall ist die Variable x eine "globale" Variable, ist also im gesamten C-File bekannt und benutzbar. Im zweiten Fall ist x eine lokale Variable, kann also nur innerhalb main verwendet werden. Und: bei jedem neuen Durchlauf von main wird sie neu instanziiert, behält also einen vorherigen Wert nicht bei - ist bei main vielleicht nicht so wichtig, aber kann woanders wichtig sein.
im 1. Fall handelt es sich um eine globale Variable. Sie ist im gesamten Programm gültig und bekommt eine feste Adresse im RAM. Im 2.Fall ist es eine lokale Variable, sie ist nur innerhalb der main-Funktion gültig und ansprechbar.
hier handelt es sich ja aber ums "main". das heisst doch das die variable dann sowieso überall gültig sein wird, oder?
main ist auch nur eine Funktion wie alle anderen - mit dem Unterschied, dass sie nach startup automatisch angesprungen wird. Sonst ist kein Unterschied zu anderen Funktionen.
@crazy horse: Ich seh, wir sind uns schon wieder einig ... :-)
Noch eine Frage zu den Variablen: Welche Vorteile bietet die Verwendung von lokalen Variablen?
Z.B dass keine anderen Funktionen darauf zugreifen können (Sicherheit) sowie die automatische Speicherfreigabe beim Verlassen der Funktion. Und lokale Arrays können mit variabler Größe angelegt werden. MfG Mark
>Und lokale Arrays können mit variabler Größe angelegt werden.
Kannst Du das bitte mal erläutern?
In C können Arrays garnicht mit variabler Grösse angelegt werden.
Und wenn man den Speicher dynamisch allokiert ist es egal,
ob der Zeiger dazu global oder lokal ist.
meinste so? ... int function_x (wert){ unsigned char Array[wert]; ... }
Rudolph wrote: >>Und lokale Arrays können mit variabler Größe angelegt werden. > > Kannst Du das bitte mal erläutern? > > In C können Arrays garnicht mit variabler Grösse angelegt werden. Seit C99 kann man das machen. > Und wenn man den Speicher dynamisch allokiert ist es egal, > ob der Zeiger dazu global oder lokal ist. Stimme ich nicht zu. Es ist niemals egal, ob man eine Variable lokal oder global anlegt. Man möchte nach Möglichkeit den Scope einer Variablen auf den kleinstmöglichen Bereich einschränken, der gerade noch sinnvoll ist. Dieses Prinzip zur Komplexitätsbeherrschung hat sich als so erfolgreich herausgestellt, das daraus ein letztendlich komplett neues Programmierparadigma entstanden ist: Objektorientierte Programmierung. Klar OOP ist dann natürlich noch deutlich mehr, aber die Scope- Begrenzung durch Klassen ist ein wesentlicher Bestandteil.
ich meine kann man an lokales Array anlegen, wobei die Größe des Arrays der Funktion mitgegeben wird?
Bastler wrote: > ich meine kann man an lokales Array anlegen, wobei die Größe des Arrays > der Funktion mitgegeben wird? In C99 kann man das. Probiers einfach aus ob dein Compiler schon soweit ist. Wenn nicht, dann wird er dir eine Fehlermeldung um die Ohren hauen, die sinngemäß "Array Size must be constant" bedeutet.
>> In C können Arrays garnicht mit variabler Grösse angelegt werden. > >Seit C99 kann man das machen. Interessant. >> Und wenn man den Speicher dynamisch allokiert ist es egal, >> ob der Zeiger dazu global oder lokal ist. > >Stimme ich nicht zu. >Es ist niemals egal, ob man eine Variable lokal oder global anlegt. Natürlich ist es nicht egal, wo man eine Variable anlegt. Dem Compiler ist es allerdings schon egal, ob er einen globalen oder lokalen Zeiger bekommt dem er die Allokierung zuweisen kann.
> Welche Vorteile bietet die Verwendung von lokalen Variablen?
Das sorgt für Ordnung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.