PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Pointer Problem


Einfachkrank
2003-04-11, 15:05:16
Hi,

also ich hab da einen Pointer auf einen Array mit dem Typ einer eigenen Struktur geschrieben und möchte mit Hilfe einer externen Funktion, die den Pointer auf den Array und einen Pointer des Indexwertes erhält, deren Inhalte verändert. Ungefähr so:

typedef struct AB_TYP
{
int a, b;
}AB;

AB array[10];
AB *ab = &array[0];
int index;
int *i = &index;

// ... irendwo in den unendlichen Tiefen des Programms :)

void MachWas(AB *array, int *index)
{
index += 1;
array[index]->a = 15;
}

//...
MachWas(ab, i);
Aber, es klappt halt net so ganz. Wie muss das denn richtig aussehen, damits funktioniert ?

MFG Einfachkrank

GloomY
2003-04-11, 15:39:50
Originally posted by Einfachkrank

AB *ab = &array[0];
Öhm, array[0] ist schon ein Zeiger, da brauchst du kein '&' mehr davorzusetzen.
Das musst du nur machen, wenn du einem Zeiger die Adresse einer Variablen zuweisen willst.
Also sowas wie:


int a;
int *b = &a;

Bei einem Zeiger kannst du einfach Zeiger1 = Zeiger2; schreiben:

int *a;
int *b = a;

Einfachkrank
2003-04-11, 15:53:49
Also mit array[0] gings nich, dann hab ich das [0] weggelassen, aber ging im Endeffekt auch net, das Programm beendet sich mit Microsoft Style "Wollen Sie einen Problembericht an Microsoft senden" ...

dann hab ichs auch noch mit den folgenden Kombinationen probiert:
void MachWas(AB *array, int *index)
{
index += 1; // *index += 1;
array[index]->a = 15; // array[*index].a = 15;
}aber entweder hat sich das Programm aufgehängt oder es kam "illegal index, indirection not allowed" ... :(

Einfachkrank
2003-04-11, 16:14:42
OK, VERDAMMT! Ich hab das Problem schon gefunden... Ich hatte zwei Funktionen, eine zum setzen der Pointer und eine zum arbeiten, nur hatte ich die erste nicht aufgerufen ... :D :D :D

Xmas
2003-04-11, 16:47:10
Originally posted by GloomY
Öhm, array[0] ist schon ein Zeiger, da brauchst du kein '&' mehr davorzusetzen.
array[0] ist doch kein Zeiger =)
array ist ein Zeiger (jaja, mit der Ausnahme von sizeof()... )

Vedek Bareil
2003-04-13, 23:25:28
Originally posted by GloomY
Öhm, array[0] ist schon ein Zeiger, seit wann denn das?
Nicht array[0] ist ein Zeiger, sondern array, nämlich auf array[0]:
array = &array[0]
array[0] ist eine Variable vom Typ AB. Deswegen macht auch EK's Konstruktion:
array[index]->a = 15;
keinen Sinn. Das müßte eher so aussehen:
array[index].a = 15;
oder wenn man scharf auf Zeigerarithmetik ist:
*(array + index).a = 15
oder
(array + index)->a = 15;

Edit: nee, ist so ja auch Quatsch, da index in dem void keine int-Variable ist, sondern ein Zeiger auf eine solche. Es muß also heißen:
array[*index].a = 15;
EK hat offenbar gedacht, das sei äquivalent zu
array[index]->a = 15;
ist es aber nicht. Äquivalent dazu wäre
(*array[index]).a = 15
was schon deshalb falsch falsch wäre, weil index kein int ist.

GloomY
2003-04-14, 00:08:14
Och je, was hab' ich da wieder geschrieben... *duck* :bad1:

;(