Gültigkeitsbereich von Variablen in C

Persönliche Seite #729132
Lesenswert?
• ▲
▼
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.
Gast #729133
Lesenswert?
• ▲
▼
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.
Gast #732605
Lesenswert?
• ▲
▼
>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.
#732612
Lesenswert?
• ▲
▼
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.
#732624
Lesenswert?
• ▲
▼
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.
Gast #732654
Lesenswert?
• ▲
▼
>> 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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren