Zeiger und 2-dimensonales Array



  • hi.

    habe folgenden code:

    char strings[5][2]={{0,'a'},{1,'b'},{2,'c'},{3,'d'},{4,'e'}};
    
      char *pStr = 0;
      pStr =  & strings;
    

    Ist das überhaupt richtig? Der Zeiger soll auf das ganze feld strings zeigen.

    möchte jetzt via printf den Buchstaben 'b' angezeigt bekommen, aber unter benutzung des pointers. WIE geht das??



  • Hallo,

    o-ta schrieb:

    hi.

    habe folgenden code:

    char strings[5][2]={{0,'a'},{1,'b'},{2,'c'},{3,'d'},{4,'e'}};
    
      char *pStr = 0;
      pStr =  & strings;
    

    Ist das überhaupt richtig?

    Hast du es ausprobiert? Wenn ja, dann hätte sich dein Compiler beschweren müssen.
    Merke: Der Bezeichner eines 1D-Arrays vom Typ T ist implizit in einen Pointer T* konvertierbar. Für Arrays mit N Dimensionen (N > 1) ist eine implizite Konvertierung des Array-Bezeichners nach (*T)[N - 1] möglich, aber nicht nach T*!. Siehe dazu auch: http://www.c-plusplus.net/forum/viewtopic-var-t-is-58906.html (C++-FAQ).

    möchte jetzt via printf den Buchstaben 'b' angezeigt bekommen, aber unter benutzung des pointers. WIE geht das??

    In C++ benutzt man normalerweise cout. Deswegen bekommst du von mir ein Beispiel mit selbigem :p. (Dieses Beispiel umzuschreiben, sollte aber nicht das Problem darstellen. Wenn doch: Frag nach :)).

    int main()
    { 
      char strings[5][2]={{0,'a'},{1,'b'},{2,'c'},{3,'d'},{4,'e'}};
    
      char (*p)[2] = strings;
    
      cout << "b = " << *(*(p + 1) + 1) << endl;
      cout << "oder b = " << p[1][1] << endl;
      cout << "oder b = " << (*(p + 1))[1] << endl;
      //edit: Wie sieht wohl die noch verbleibende Möglichkeit aus? :-)
    
      return 0;
    }
    

    Gruß, Caipi.


Anmelden zum Antworten