Zeiger auf Element in mehrdimensionalen Arrays
-
Hallo,
in einem Programm habe ich ein mehrdimensionales Array vom Typ char, das 3x3 char-Speicherplätze enthält.
In jedem Array wird dann eine hexadezimale Zahl zwischen "00" und "FF" gespeichert.Sieht dann in etwa so aus:
char c[3][3] c[0][0]='A'; c[0][1]='B'; c[0][2]='\0'; c[1][0]='C'; //... c[2][2]='\0';Als Nächstes soll die als char-Array gespeicherte Zahl in einen entsprechenden char-Wert umgewandelt werden (z.B. FF wird zu 255).
Dafür hab ich eine Funktion geschrieben, die ein char-Zeiger als 1. Parameter und das entsprechende Zahlensystem als 2.Parameter erwartet.
Leider funktioniert die Referenzierung nicht:
int i=ConvertToInt(&c[1],16);Der Compiler erzeugt damit folgenden Fehler:
error C2440: 'Initialisierung': 'char (*)[3]' kann nicht in 'char *' konvertiert werden
Kann mir jemand also sagen, wie ich die Speicheraddresse von c[1] abfragen kann?
-
Taeli schrieb:
Kann mir jemand also sagen, wie ich die Speicheraddresse von c[1] abfragen kann?
Mit &c[1]. Aber das willst du nicht. Du willst c[1], nicht die Adresse von c[1]. Und c[1] bekommst du mit.. na ja.. c[1] eben. Oder aber wahlweise auch über &c[1][0].

http://ideone.com/xGmgR
-
int ConvertToInt(const char* z, unsigned b) { return 123; } int main() { char c[3][3] = {"AA","BB","CC"}; int i = ConvertToInt(&c[0][0],16); i = ConvertToInt(&c[1][0],16); i = ConvertToInt(&c[2][0],16); }
-
Hat geklappt, danke!

Und nochmal danke für den Tipp mit den Klammern bei der Array-Definierung. Wird mir in Zukunft wahrscheinlich etliche Zeilen Code sparen.

-
Taeli schrieb:
Wird mir in Zukunft wahrscheinlich etliche Zeilen Code sparen.

Wenn du dir noch mehr Zeit sparen willst, solltest du das nächste Mal überlegen, ob nicht ein std::vector die bessere Wahl als ein Array ist. Das ist nämlich meistens der Fall.
-
daddy_felix schrieb:
Wenn du dir noch mehr Zeit sparen willst, solltest du das nächste Mal überlegen, ob nicht ein std::vector die bessere Wahl als ein Array ist.
In dem Fall wäre ein std::array die noch bessere Wahl...
-
Ich stimme meinen vorpostern zu, dass man auf std::vector bzw. array zugreifen sollte, wenn es allerdings umbedingt nen 2Dimensionales Array mit Pointern sein muss (warum auch immer) versuch das mit einem einzigen Pointer zu realisieren.
template<typename T> class Array2D { size_t width_; size_t height_; T* pArr; public: explicit Array2D(size_t width = 0, size_t height = 0); Array2D(const Array2D& rhs); Array2D(Array2D&& rhs); ~Array2D(); template<typename U> friend void swap(Array2D<U>& lhs, Array2D<U>& rhs); auto operator=(Array2D rhs) -> Array2D&; auto width() const -> size_t; auto height() const -> size_t; auto operator[](int x) -> T*; auto operator[](int x) const -> const T*; };