2016-07-12 13 views
-1
#include <iostream> 
    #include <cmath> 
    using namespace std; 


    struct demo{ 
     int one; 
     int two; 
     int three; 
    }; 
    int main() 
    { 
     demo d1; 
      demo *dptr=&d1; 

      *dptr=1 ; 
      ++dptr; 
      *dptr=2; 
      ++dptr; 
      *dptr=3; 

     return 0; 
    } 

Bitte erklären Sie, warum der obige Code logisch aussieht, aber tatsächlich nicht funktioniert in Zeile 13 des Codes. Protokollfehler:Strukturen und Zeigerarithmetik

no match for ' operator= ' in ' *dptr=1 '

+1

Weil du effektiv 'd1 = 1;' machst - wie würde das funktionieren? – immibis

+0

Sie versuchen, den Wert einer Demo-Struktur auf ein int zu setzen, was? –

+0

danke immibis, dumme mich – afroCode

Antwort

0

Sie benötigen dptr als int*, nicht demo* zu erklären.

int *dptr=&d1; // might need type cast (int*) 

*dptr=1 ; 
1
demo d1; 
demo *dptr=&d1; 

*dptr=1 ; 
++dptr; 
dptr=2; 
++dptr; 
dptr=3; 

dptr ist ein Zeiger auf eine demo Struktur zeigt. Also, *dptr = 1 ist im Grunde das gleiche wie d1 = 1;, das ist nicht gültig.

Plus, mit einem Zeiger dieses Typs und tun ++ auf diesen Zeiger gilt Zeiger Arithmetik für diesen Typ, schob den Zeiger sizeof(demo), das ist nicht was Sie hier wollen. Sie benötigen einen int Zeiger durch Gießen um es zu schaffen, dann den Zeiger mit den 3 Felder

int* dptr=reinterpret_cast<int*>(&d1); 

Padding den Tag verderben, obwohl immer noch zu lesen, aber da sie alle int ‚s sind, sollten Sie sein fein.

+0

gut verstanden Gill, aber ich nehme an, wenn ich diese Option [int * dptr = reinterpret_cast (&d1);] jemand würde fragen, '' warum nicht einfach ein Array verwenden, wenn alle Mitglieder Int-Typ? "Richtig? – afroCode

+0

@ user3568438 Vielleicht Ja, ich bin mir nicht sicher, was dein Anwendungsfall ist. –