[c++] zweidimensionales dynamisches array

Aiju hat gesagt.:
Ist doch egel ob c oder c++...

Das hat nix mit C oder C++ zu tun.

Code:
char* x[] = {new char[26]};
Ist kein dynamisches Array (sowas gibts in reinem C++ nicht). Das ist ein Array aus Zeigern auf char mit genau einem Element.

Code:
char* tafel[] = {new char[26]};
char cache[26];
cache = Tafel[0];
Tafel[0] = new char[27];
Tafel[0] = cache;

Das geht in C++ nicht, da du kein Array zuweisen kannst (du kannst es höchstens bei der Initialisierung mit const-werten füllen).
Tafel[0] = cache;
würde dagegen schon funktionieren, das einzige Problem wäre, dass, wenn du das auf alle Elemente von Tafel anwendest (in diesem Fall ja nur eins, siehe oben), würden alle Elemente von Tafel auf die gleiche Speicherstelle verweisen (welche zudem noch lokal wäre). Außerdem wäre es ein ziemliches Speicher-Leck, da du die neuen 27 allokierten chars einfach vergisst.


Aiju hat gesagt.:
andreas_gierisch hat gesagt.:
das klappt leider nur, wenn ich feste werte angebe (char alphabet[26][26]).
ich bräuchte das allerdings für variablen (char alphabet[x][y])
so vielleicht:
Code:
void GetTafel(char** alphabet)
{
for(int i=0;i<26;i++)
GetAlphabet(alphabet[26]);
}

Für ein array[x][y]; ist das nicht möglich, nur wenn zumindest y const ist, denn es darf nur immer eine Dimension eines Arrays undefiniert sein (logisches Problem, sonst kann der Compiler ja nicht wissen, in welchen Abständen das erste Element einer Dimension vorkommt).

char** alphabet wäre da schon ein Lösungsansatz, nur dass der Typ nicht mit char[][] gleichzusetzen ist.
char[][] stellt ein 2-dimensionales Array aus Elementen von char dar, während char** ein Array (bei entsprechender Benutzung natürlich nur) aus Zeigern auf chars sind.
-> bei char[][] gibts keine Zeiger (außer den Identifier)

Code:
typedef double* YVector = new double [NY+1];

Was soll das "= .... " hinter dem typedef?
Ein typedef erschafft nur ein Alias für einen Bereits existierenden Typen, eine Zuweisung mit ins Spiel zu bringen ist nicht möglich.
 
@andreas_griechisch

Das was du dort hast ist kein zweidimensionales Array von double Werten. Du hast ein Array von Zeigern auf eindimensionale Arrays von double Werten.

Ein dynamisches Array von double Werten bekommst du mit
double *dA = new double[X*Y];

Wobei sich der Zugriff auf einzelne Elemente von einem
double A[20][50] etwas unterscheidet.

Bsp:
du willst auf a=5 und b = 6 zugreifen
Im ersten Fall bist du an der Stelle dA[30], im zweiten Fall A[5][6] bist du an der Speicherstelle A+81 in Bezug auf A[0][0].
Du musst also beim Zugriff etwas aufpassen.
 
Sorry,

ich wollte das Thema eigentlich nur vervollständigen, da es so aussah als ob du mit der Verwendung von Arrays gewisse Probleme hast.

Die Sache mit Arrays von pointern auf double ist sehr gut. Du kannst damit auf komplette Zeilen zugreifen. Auch die Derefenzierung ist damit sehr schön möglich. Du kannst Arrayoperatoren verwenden z.B. TC[4][9] = 47.11

Also nichts für ungut
dora
 

Neue Beiträge

Zurück