Die Computerseite von Eckart Winkler
Die Rolle des Stacks in C - Teil 2 |
Sie wissen aus dem ersten Teil, daß in C bei der Übergabe von Parametern an Funktionen generell eine Wertübergabe stattfindet. Trotzdem muß es doch irgendwie möglich sein, eine Funktion set7 zu schreiben, die tatsächlich den Wert der übergebenen Variablen ändert. In anderen Programmiersprachen geht das doch auch! Natürlich geht das in anderen Programmiersprachen,
und natürlich geht das auch in C. Allerdings etwas anders.
Man muß eben die Adresse der Variablen übergeben.
Und damit gibt man der Funktion die Möglichkeit, auf die Stelle
im Speicher zuzugreifen, an der der Wert der Variablen gespeichert ist.
Somit kann man auch den Wert ändern.
Es ist gegenüber dem Programm aus Teil 1 nur geringfügig
geändert. Und zwar wird die Funktion set7 nicht mit einem Parameter
short y, sondern short *y definiert. y enthält die Adresse der übergebenen
Variablen. Soll auf den Wert der Variablen zugegriffen werden, muß der
Operator * zur Anwendung kommen.
Nun sollten Sie sich auch den anderen Funktionsaufruf in diesem
Programm ansehen, nämlich den von printf. Im ersten Teil hatten wir ja
schon überlegt, daß als erstes die Adresse des Formatstrings
auf den Stack gelegt werden muß. Die Frage aber: Wo befindet sich
denn der Formatstring überhaupt? Irgendwo im Speicher muß er
doch abgelegt sein. Wird dieser auch auf dem Stack angelegt?
Eine andere Frage betrifft die globalen Variablen.
Sie wissen, daß ein C-Programm im Grunde nur aus Funktionen besteht
und alle in diesen definierten Variablen lokale Variablen sind, die auf
dem Stack angelegt werden. Allerdings gibt es auch globale Variablen,
die keiner Funktion zugeordnet sind und daher in allen Funktionen
gültig sind. Werden denn diese auf dem Stack angelegt?
|