# Lokale/Globale Variablen



## Waterman (15. Sep 2013)

Hallo,
ich versuche gerade die Zuweisung/Veränderungen von globalen/lokalen Variablen zu verstehen. Könnte mir vielleicht jemand sagen an welcher stelle ich die Zuweisung/ Veränderung falsch mache ?
Ich glaube das Ergebnis ist a 2 jedoch komme ich darauf nicht


```
int a=0, b=2;

void bar(int b){
     a=b; //a=4
}
void foo(int a, int b){ //foo(2,0)
     {
       int b=a; //b=2
       int a=a+b; //a=2+2=4
     }
    bar(a); //a=4
}

int main(int argc, char *argv[])
{
    int b=a;  // b=0
    {
        int a=2;  //a=2
        foo(a, b); //a=4
    }
  return a; //a=4
}
```

Oder bleibt der Wert 2 weil Parameter per Call by Value übergeben werden und deshalb die Funktion den aktuellen Parameter bei Aufrufer nicht verändern kann ?


----------



## ARadauer (15. Sep 2013)

ja genau, die Zuweisung zu den int in foo oder bar ändern gar nichts an der variable b oder a in der main.


----------



## HBerger (23. Sep 2013)

Wobei das hier auch nen echt mieses Beispiel ist  
Wer solchen Code in C schreibt, gehört eigentlich in die Programmierer-Hölle  


```
int a=0, b=2; // Globale definition von a und b modulweit (cpp datei)
     
    void bar(int b){  // parameter b ueberdeckt globales b
         a=b; //a=4  // zuweisung an parameter b von a global (ohne effekt nach der funktion)
    }
    void foo(int a, int b){ //foo(2,0) // parameter a und b ueberdecken globales a und b
         {
           int b=a; //b=2  // neudefinition von b, ueberdeckt parameter a 
           int a=a+b; //a=2+2=4 // neudefinition von a, ueberdeckt parameter a
         }
        bar(a); //a=4
    }
     
    int main(int argc, char *argv[])
    {
        int b=a;  // b=0 // lokale neudefinition von b, ueberdeckt globales b
        {
            int a=2;  //a=2 lokale neudefinition von a, ueberdeckt globales a
            foo(a, b); //a=4
        }
      return a; //a=4
    }
```

Ich glaub nicht das derjenige, der den code geschrieben hat, so richtig wusste was er tut. 
das er hier nicht nur mit 2 sondern mit 6 weiteren arbeitet ... 

Ciao ...


----------

