#include <stdio.h>
#include <unistd.h>
int staticVar = 0;
int main()
{
staticVar += 1;
sleep(10);
printf("Address: %x\nValue: %d\n", &staticVar, staticVar);
return 0;
}
Ich bin verwirrt, wie dieses Programm die Adresse der Variablen "staticVar" ausgibt. Vom Spiel mit dem Code bemerkte ich, dass, wenn Sie die Anweisung printf dazu ... ändernDemonstration des virtuellen Speichers mit C
printf("Address: %x\nValue: %d\n", staticVar, staticVar);
Dann gedruckt wird der Wert der Variablen „staticVar“ in „Adresse“ Position.
Einige schnelle Forschung führte mich zu verstehen, dass die Hinzufügung von "&" bedeutete, dass die Variable "staticVar" referenziert wurde und dass der "% x" in der printf-Anweisung den Wert in hex ausgibt. Selbst mit dieser Information bin ich immer noch verwirrt, warum das funktioniert.
ich online lese auch, dass Sie mit dieser Zeile aus der Adresse zu einem gewissen Variable drucken können ...
printf("Address: %p\n", (void*) &staticVar);
Gibt es Vorteil, um es auf diese Weise zu tun?
Ich brauche nur eine Erklärung, was das "&" Symbol effektiv tut.
Wenn Sie '&' nicht verstehen, wie haben Sie versucht, den virtuellen Speicher zu verstehen? – immibis
Ich dachte, dass das Lernen über Betriebssysteme cool klingt, also nahm ich ein Buch auf. Ich kenne C oder C++ nicht in einem beträchtlichen Sinn. Normalerweise lerne ich so oder so. Virtuelles Gedächtnis auf der Ebene, auf der ich mich befinde, ist rein konzeptionell. Im Moment interessiert es mich nicht zu wissen, wie das OS von einer virtuellen Adresse zu einer physischen Adresse wird, weil, wie ich lese, dies ein schwieriger Prozess ist. Auf der ganzen Linie werde ich aber. –
Aktivieren Sie Warnungen und beheben Sie alle gemeldeten Warnungen. Ihr Code ruft undefiniertes Verhalten auf. '% x' ist ein ungültiger Konvertierungstyp für einen Zeiger! Bevor Sie mit der Arbeit an OS beginnen, wählen Sie ein Buch über C oder C++. Sie sind verschiedene Sprachen, also wählen Sie die Sprache, die Sie lernen möchten. Lernen Sie zuerst die Sprache, die OS-Programmierung. – Olaf