Update (int) Variable in C innerhalb einer Funktion [duplizieren]

7

Ich versuche eine Funktion zu schreiben, die den Bildschirm in meinem einfachen C-Snake-Spiel ändert.

%Vor%

Funktion:

%Vor%

Dieser Code aktualisiert den Code nicht, er wird weiter ausgeführt. Was ist falsch an meinem Code?

    
user3589718 15.05.2014, 00:49
quelle

5 Antworten

12

stage wird als Wert an changeStage übergeben. stage = 1 ändert nur den lokalen Wert von stage in changeStage , nicht den Wert von stage in main . Sie müssen stattdessen einen Zeiger übergeben:

%Vor%     
univerio 15.05.2014, 00:52
quelle
6

C ist eine Sprache nach Wert. Der einfachste Weg, um das zu erreichen, was Sie wollen, ist, einen Verweis auf die Variable zu übergeben, die Sie ändern müssen. Zum Beispiel:

%Vor%

Hinweis: Möglicherweise müssen Sie die Zeiger nachlesen, um den Code vollständig zu verstehen, wenn Sie gerade mit der C-Programmierung beginnen. Im Beispielcode übergeben Sie den Wert von "stage" an Stelle, wo der Wert von stage gespeichert wird. Die Funktion kann dann den Inhalt des Standorts ändern.

    
theorifice 15.05.2014 00:54
quelle
2

C-Funktionsargumente sind pass-by-value. Dies bedeutet, dass Sie anstelle eines Verweises an stage den darin gespeicherten Wert übergeben. Das Update, das Sie in changeStage ausführen, gilt nur für die Kopie, die erstellt wurde.

Wenn Sie eine Variable in einer anderen Funktion aktualisieren möchten, müssen Sie einen Zeiger darauf übergeben.

%Vor%

&stage sagt, dass Sie die Adresse von stage übernehmen und an die Funktion übergeben sollen. Das Argument stage_p zeigt dann auf das int im Hauptverzeichnis.

*stage_p bewirkt, dass es den Wert verwendet, auf den stage_p zeigt, was in Ihrem Fall stage ist.

Weitere Informationen

    
Ryan Haining 15.05.2014 00:53
quelle
2

Sie ändern nicht die ursprüngliche stage Variable, sondern nur eine lokale Kopie in changeStage function.

Sie müssen einen Zeiger verwenden:

%Vor%

mit der Funktion:

%Vor%

Sie müssen mehr grundlegende Konzepte der C-Sprache lernen. Zeiger ist ein sehr wichtiges Merkmal in der Sprache C.

    
jiandingzhe 15.05.2014 00:54
quelle
1

Korrekt, Sie müssen den Zeiger übergeben, wenn Sie den Wert der Variablen in main () ändern möchten, oder Sie können ihn als globale Variable erstellen, so dass er sowohl in Funktionen als auch in main zugänglich ist.

%Vor%     
Survaf93 15.05.2014 00:59
quelle

Tags und Links