2-dimensionales Array initialisieren

Nunu008

Grünschnabel
Hallo,

ich habe diesen Code im Forum gefunden:
Meine Frage ist, wie könnte man dies mit einem zwei-dimensionalen Array machen

C:
#include <iostream>
class CMyClass
{
public:
    CMyClass(float fArray[])
    {
        m_pfArray = new float[sizeof(fArray)];
        memcpy(m_pfArray, fArray, sizeof(fArray) * sizeof(float));
    }
 
    ~CMyClass()
    {
        delete [] m_pfArray;    
    }
 
    float   *m_pfArray;
};
 
int main(int argc, char* argv[])
{
    float fArray[] = { 0, 0.001f, 0.003f, 0.01f };
 
    CMyClass myClass(fArray);
 
    std::cout << myClass.m_pfArray[0] << std::endl;
    std::cout << myClass.m_pfArray[1] << std::endl;
    std::cout << myClass.m_pfArray[2] << std::endl;
    std::cout << myClass.m_pfArray[3] << std::endl;
 
    return 0;
}

Gruss Nunu008
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

desweiteren habe ich weiter mit dem Code experimentiert und habe die Werte in
Code:
float fArray[] = { ...};

vervierfacht, doch beim Ausgeben der Werte, werden die erste vier wieder korrekt
ausgegeben, der Rest aber nicht.

Woran könnte dies liegen?

Gruss


C:
#include <iostream>
class CMyClass
{
public:
    CMyClass(float fArray[])
    {
        m_pfArray = new float[sizeof(fArray)];
        memcpy(m_pfArray, fArray, sizeof(fArray) * sizeof(float));
    }
 
    ~CMyClass()
    {
        delete [] m_pfArray;    
    }
 
    float   *m_pfArray;
};
 
int main(int argc, char* argv[])
{
    float fArray[] = { 0, 0.001f, 0.003f, 0.01f };
 
    CMyClass myClass(fArray);
 
    std::cout << myClass.m_pfArray[0] << std::endl;
    std::cout << myClass.m_pfArray[1] << std::endl;
    std::cout << myClass.m_pfArray[2] << std::endl;
    std::cout << myClass.m_pfArray[3] << std::endl;
 
    return 0;
}
 
desweiteren habe ich weiter mit dem Code experimentiert und habe die Werte in

float fArray[] = { ...};

vervierfacht, doch beim Ausgeben der Werte, werden die erste vier wieder korrekt
ausgegeben, der Rest aber nicht.
Das liegt einfach daran, das der Code den du da gefunden hast nicht korrekt ist.
C++:
CMyClass(float fArray[])
    {
       m_pfArray = new float[sizeof(fArray)];
sizeof(fArray) berechnet nicht die Anzahl der Elemente des Arrays, sondern die Größe der Variablen. Ein Array wird einfach als Zeiger übergeben, d.h. sizeof(fArray) entspricht sizeof(float*) -- und dieser Wert ist immer gleich, egal wieviele Elemente dein Array hat.

Du mußt die Anzahl der Elemente als Parameter an den Konstruktor übergeben.
C++:
CMyClass(float fArray[], int length) {
  m_pfArray = new float[length];
  memcpy(m_pfArray, fArray, length * sizeof(float));
}
In der main Funktion wiederum kannst du sizeof verwenden um die Größe des statischen Arrays (und die Anzahl der Elemente) zu berechnen.

C++:
float fArray[] = { 0, 0.001f, 0.003f, 0.01f };

int length = sizeof(fArray) / sizeof(fArray[0]);
Gruß
 
Zurück