Was bedeutet "p = (int [2]) {* p};" -Zeile in C-Zeiger?

7

Soweit ich es verstanden habe, übergebe ich die Adresse der Variable a an die Funktion int ffx1 .

Nach was genau bedeutet diese Zeile p = (int[2]){*p}; ?

%Vor%     
hago 31.10.2017, 17:36
quelle

2 Antworten

7

Es ist ein -Zeiger für zusammengesetzte Literale .

C11-§6.5.2.5 Zusammengesetzte Literale (p9):

  

BEISPIEL 2 Im Gegensatz dazu in

%Vor%      

p wird die Adresse des ersten Elements eines Arrays von zwei zugewiesen   ints, wobei der erste den Wert aufweist, auf den p und   Sekunde, Null. Die Ausdrücke in diesem zusammengesetzten Literal müssen nicht sein   Konstante. Das unbenannte Objekt hat eine automatische Speicherdauer.

    
rsp 31.10.2017, 18:10
quelle
11

Mit int ffx1(int * p) , p ist ein Zeiger auf ein int .

(int[2]){*p} ist ein zusammengesetztes Literal , das ein int -Array von 2 definiert. @ BLUEPIXY " Dieses unbenannte Array nennen wir X[2] . Sein erstes Element hat den Wert *p , und das nächste Element, das ein int ist, wird auf Null initialisiert (§6.7.9 21 & amp; 10), da es nicht explizit aufgeführt ist.

p = .... hat den Zeiger p einem neuen Wert zugewiesen. In diesem Fall wird das obige Array X[] in die Adresse seiner ersten Registrierung oder &X[0] konvertiert.

return p[1] löscht p und gibt den Wert in X[1] oder 0 zurück.

    
chux 31.10.2017 17:50
quelle

Tags und Links