2016-05-09 9 views
-5

Ich habe versucht, mich umzusehen, war aber nicht in der Lage, eine Antwort dafür zu finden. Ich habe etwas erklärt, als wir einen Doppelstern benutzten, ** aber ich bin mir nicht sicher, ob das auf meinen Fall zutraf.Die Bedeutung von "Sternchen Sternchen" in C: * (flüchtige Int *) foo

Ich habe über eingebettete Systeme Code kommen, die ein wenig fremd für mich aussieht:

port0 = *(volatile int *)(0x1C002100) 

was dieser Vorgang macht, ist, dass sie das GPIO-Port-Adresse, die liest ist 0x1C002100. Aber was ist der Deal mit all diesen Sternchen?

ich diese so etwas wie hätte geschrieben:

port0 = *0x1C002100 

sind irgendeine Art von Zeigertyp Gießen tun sie und daher verwenden wir zwei Sternchen? Das wäre meine beste Schätzung. Danke für Ihre Hilfe !

+1

Schnapp dir ein Buch über C !!!!! –

+0

Wenn dieser Code wirklich Standard-Integer-Typen wie "int" verwendet, ist es wirklich schlechter Code und sagt etwas (nicht positiv) über die Qualität des Codes aus. Richtig wäre die Verwendung von Typen fester Breite, z. 'uint16_'. – Olaf

Antwort

2

Schauen Sie sich den Ausdruck an, er konvertiert zuerst eine Integer-Konstante in einen Zeiger, dann nimmt er den Zeiger, der eine ganze Zahl ergibt. Es ist im Wesentlichen der gleiche wie:

int *p = (volatile int *)(0x1C002100); 
int n = *p; 
port0 = n; 

Die erste * bezeichnet den Zeigertyp, der zweite ist ein Dereferenzierungsoperator.

Allerdings ist die zweite Zeile ungültiger C-Code, da Sie eine ganze Zahl nicht dereferenzieren können.

port0 = *0x1C002100;