Was ist Variable?

Ein benannter Behälter, der in einem Programm einen Wert speichert. Er wird mit einem Typ wie integer oder real deklariert und durch Zuweisung geändert. Die Zuweisung eines neuen Werts verwirft den vorherigen.

Japanische Bezeichnung: 変数

„Variable“ kommt in 23 Übungsfragen aus 6 Themen vor, z. B. Grundlagen der Programmiersprache C, Multicore und Synchronisation, Grundlagen von Linux und der Kommandozeile.

Fachgebiet: Grundlagen der Programmierung (Pseudocode nachverfolgen)

Jetzt üben: Fragen zu Variable

In welcher Section wird eine außerhalb von Funktionen geschriebene globale Variable „int limit = 100;“ in C im Allgemeinen abgelegt?

  1. A.data (Daten mit Initialwert)
  2. B.bss (Daten ohne Initialwert)
  3. C.text (Maschinencode)
Antwort und Erläuterung anzeigen

Antwort: A. .data (Daten mit Initialwert)

Globale und statische Variablen mit einem von 0 verschiedenen Initialwert liegen in der Section .data, und ihr Initialwert ist in der Datei gespeichert. Beim Laden des Programms wird dieser Inhalt unverändert in den Speicher abgebildet, sodass limit zu Beginn von main den Wert 100 hat. .data wird zur Laufzeit überschrieben und ist daher ein Bereich mit Lese- und Schreibrecht.

Wo liegt während der Ausführung eine in einer C-Funktion deklarierte lokale Variable ohne static (automatische Variable)?

  1. AIn der Section .data
  2. BAuf dem Stack (oder in Registern)
  3. CAuf dem Heap
Antwort und Erläuterung anzeigen

Antwort: B. Auf dem Stack (oder in Registern)

Lokale Variablen werden beim Aufruf der Funktion im Stack-Frame angelegt (durch Optimierung können sie auch nur in Registern liegen) und verschwinden bei der Rückkehr aus der Funktion. Daher kann jeder Aufruf bei Rekursion auch bei beliebig tiefer Verschachtelung derselben Funktion eigene Variablen haben. In der ausführbaren Datei gibt es keine Section für lokale Variablen; der Speicher wird am Funktionsanfang durch Verschieben des Stack-Pointers reserviert.

„Variable“ in den Erläuterungen

Fragen mit „Variable“ (23)

  1. In welcher Section wird eine außerhalb von Funktionen geschriebene globale Variable „int limit = 100;“ in C im Allgemeinen abgelegt?
  2. Wo liegt während der Ausführung eine in einer C-Funktion deklarierte lokale Variable ohne static (automatische Variable)?
  3. Der obige Code verdoppelt die gemeinsame Variable counter mit CAS(&p, erwarteter Wert, neuer Wert). Wann schlägt CAS fehl und die Schleife wird wiederholt?
  4. Warum genügt es in C nicht als Synchronisation, eine für den Austausch zwischen Threads verwendete Flag-Variable nur mit volatile zu versehen?
  5. Bei einem 8-Bit-Mikrocontroller erhöht ein Timer-Interrupt die 32-Bit-Variable ticks um 1, und das Hauptprogramm liest ticks, um die verstrichene Zeit zu bestimmen. Was ist die richtige Ursache dafür, dass mitunter stark abweichende Werte gelesen werden?
  6. Ein Stack wird durch das ganzzahlige Array st mit 5 Elementen und die ganzzahlige Variable top dargestellt. Alle Elemente von st sind anfangs 0, und top beginnt bei 0. push(v) addiert 1 zu top und führt dann st[top] ← v aus; pop() gibt den Wert von st[top] zurück und subtrahiert dann 1 von top (die Elemente von st werden nicht verändert). Welche Werte haben top und st, nachdem das folgende Programm ausgeführt wurde?
  7. Im folgenden Programm wertet and seine rechte Seite nicht aus, wenn die linke Seite false ist (Kurzschlussauswertung). cnt ist eine globale Variable. Welchen Wert hat cnt nach der Ausführung des Programms?
  8. Die Klasse Counter gibt jeder Instanz eine eigene ganzzahlige Membervariable count (beim Erzeugen 0), und ihre Methode inc() addiert 1 zum eigenen count. Eine Variable vom Typ Counter enthält eine Referenz auf eine Instanz, nicht die Instanz selbst. Welchen Wert hat x, nachdem das folgende Programm ausgeführt wurde?
  9. In Embedded-Programmen wird eine Variable für den Wert eines 32-Bit-Peripherieregisters oft nicht als unsigned int, sondern als uint32_t aus stdint.h deklariert. Was ist der Hauptgrund dafür?
  10. Welche Kombination gibt in C die Zeitspanne (Lebensdauer) richtig an, in der (1) eine in einer Funktion ohne static deklarierte lokale Variable, (2) ein mit malloc reservierter Bereich und (3) eine außerhalb von Funktionen deklarierte Variable existieren?
  11. Was bedeutet die Angabe „extern int count;“ in C?
  12. Welche Ausgaben erzeugen die beiden echo-Befehle, wenn die obigen Befehle nacheinander ausgeführt werden?
  13. In welchem Fall ist die Bedingung des obigen if in einem Shell-Skript wahr?
  14. Welche Dateien liegen nach der obigen Sitzung im Verzeichnis?
  15. Welche Kombination der Ausgaben der beiden bash -c-Befehle ergibt sich, wenn die obigen Befehle nacheinander ausgeführt werden?

Verwandte Begriffe

Stack (Stapelspeicher) Zeiger (Pointer) Shell Argument volatile (Typqualifizierer) Dynamische Speicherreservierung Heap Cache-Zeile (Cache Line) Undefiniertes Verhalten (Undefined Behavior) Stack-Frame

Zur Glossarübersicht