2016-06-17 6 views
0

Ich denke, ich bin in der Nähe der Marke zu verstehen, das Konzept der Zeiger, aber ich habe ein Problem, das ich nicht auf eigene Faust lösen kann ... Ich versuche zu ändern Struktur durch eine Funktion:Ändern Array/Struktur global funktioniert nicht

struct structure 
{ 
    double lower[2]; 
}; 

void function(struct structure *structure1) 
{ 
    structure1->lower[0] = 1; 
    structure1->lower[1] = 2; 
} 

int main() 
{ 
    double a[2] = {0, 0}; 

    struct structure structure1 = { {a[0], a[1]} }; 

    function(&structure1); 
    printf("%f, %f\n", a[0], a[1]); 

Wenn ich versuche a jetzt zu drucken, die Werte bleiben gleich - er druckt 0, 0. Warum hat sich das Array nicht global geändert?

+0

Warum denkst du sollte es? C funktioniert nicht wie eine Tabelle. –

+0

Setzen Sie die 'double' Werte auf' integers'? Versuchen Sie, 1.0, 2.0 und 0.0 zu verwenden, wo Sie die Werte festlegen. – mpez0

+0

Wenn ich innerhalb der Funktion drucke, zeigt es die Werte an, die ich haben möchte. Das kann nicht das Problem sein ... – klippklar

Antwort

3

die Werte bleiben gleich - es druckt 0, 0. Warum hat sich das Array nicht global geändert?

  • Ihr Array a ist nicht eine globale Variable (es in main lokalen ist)
  • Sie nie wirklich etwas in a geändert - Sie verwendet nur seine Elemente structure1
  • Ihre function ändert structure1 initialisiert werden - aber es hat nichts mit array zu tun a
+0

Gott bin dumm. Vielen Dank! – klippklar

+0

Sie müssen entscheiden, welche zu ändern? Array? Struktur? Sie benötigen keine globale Variable, um nur ein Array zu ändern. – artm

0

Mit diesem einen, you ar e eine lokale Variable aufrufen, die den Wert 0,0 ergibt:

printf("%f, %f\n", a[0], a[1]); 

dieses Versuchen

printf("%f, %f\n", structure1->lower[0], structure1->lower[1]); 

global zu nennen.

+0

Danke das hat es gelöst! Ich fühle mich jetzt wie ein Idiot! : D – klippklar