Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.09.2007, 18:13

zeiger auf mehrdimensionales array

hallo leute, hab leider ein problem mit was mich ziemlich verwirrt und ichs einfach nicht versteh =)

also, ich wollt mal ein sudoku löseprogramm proggen, und als spielfeld hab ich da mal ein mehrdimensionales array genommen (int Field[9][9]).
jetzt zu meinem problem:

wenn man funktionen hat, und diese als parameter einen zeiger haben so ist der aufruf doch folgendermasen:
(nehmen wir an das wäre der kopf der funktion):

C-/C++-Quelltext

1
void funktionxy (int *a)


so wäre der funktionsaufruf doch:

C-/C++-Quelltext

1
2
int x = 0;
funktionxy (&x);


soweit ist es mir auch klar, aber wenn man jetzt einen zeiger übergeben will der auf ein array zeigt wäre der aufruf doch folgendermaßen:

C-/C++-Quelltext

1
2
3
4
5
6
//funktionskopf:

void funktionxy(int *a);

//aufruf:

int x[2][3];
funktionxy(&x);


schön wärs, so gehts aber nicht und ich komm einfach net drauf wieso.
aber interessant ist das dieser funktionsaufruf funktionieren würde:

C-/C++-Quelltext

1
funktionxy(*x);

das finde ich doch mehr als merkwürdig, und verwirrend noch dazu oO

danke schonmal im voraus,

lg chili

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

2

29.09.2007, 18:47

http://www.c-plusplus.de/forum/viewtopic-var-t-is-39489.html
"Don't trust your eyes: They are a hell of a lot smarter than you are"

3

29.09.2007, 19:14

hilft mir nicht wirklich weiter, da ich ja kein "zeiger" array erstellen will sondern es nur als parameter übergeben werden soll. falls ich es nur übersehn haben sollte oder zu blöd dafür bin, könnte es mir bitte wer erklären

Dofter

Treue Seele

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

4

29.09.2007, 19:33

wenn ich das richtig verstanden habe willt du ein zweidimensionales array als parameter einer funktion übergeben.

Das geht z.B. so:

C-/C++-Quelltext

1
void callmarray(int array[][elements]);


man muss die 2te dimmension immer mit angeben (was bei allen weiteren auch so ist)

man kann natürlich auch den array dynamisch in einer struktur speichen uns diese dann übergeben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
struct ARRAY
{
int** array;
// vllt auch das angeben

int zeilen;
int spalten;
};

// Funktion zum aufrufen

void callmarray(ARRAY array); // es empfielt sich hier aber eher ein call by reference um speicher zu sparen
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

5

29.09.2007, 19:47

Zitat von »"Dofter"«

wenn ich das richtig verstanden habe willt du ein zweidimensionales array als parameter einer funktion übergeben.


nein =), ich möchte einen zeiger auf das array als parameter übergeben

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

29.09.2007, 19:59

int array[9][9] dürfte einem int ** entsprechen, also versuch mal
void funktionxy(int **a);
Falls es nicht funktioniert, nicht hauen! Bin gerade ein wenig neben der Rille^^.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

29.09.2007, 20:40

Zitat von »"chili"«

Zitat von »"Dofter"«

wenn ich das richtig verstanden habe willt du ein zweidimensionales array als parameter einer funktion übergeben.


nein =), ich möchte einen zeiger auf das array als parameter übergeben


ein array ist im prinzip nur ein zeiger auf das erste element des arrays, also entweder du nimmst die methode, die dofter vorgeschlagen hat, oder du machst einen pointer auf den pointer des ersten elements (wofür es aber egtl keinen grund gibt), dann machste es so wie nox gesagt hat.
also afaik:

1. möglichkeit (die schönste mmn)

C-/C++-Quelltext

1
2
void callmarray(int array[][elements]);
callmarray(x);


2. möglichkeit (auch akzeptabel)

C-/C++-Quelltext

1
2
void callmarray(int* a)
callmarray(a);


3. möglichkeit (so wie du es beschrieben hast, aber pfui)

C-/C++-Quelltext

1
2
void callmarray(int** a)
callmarray(&x);


Zitat von »"Nox"«

int array[9][9] dürfte einem int ** entsprechen, also versuch mal
void funktionxy(int **a);
Falls es nicht funktioniert, nicht hauen! Bin gerade ein wenig neben der Rille^^.

2 dimensionale arrays sind soweit ich weiß immer noch normale pointer.

8

30.09.2007, 10:41

thx, werde die 1. methode nehmen. danke für die antworten.
finds nur komisch das das in keinem meiner 2 bücher besprochen wird, da ich ja eigentlich noch anfänger bin und das dann doch ziemlich kompliziert is

Dofter

Treue Seele

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

9

30.09.2007, 14:37

Zitat von »"chili"«

finds nur komisch das das in keinem meiner 2 bücher besprochen wird, da ich ja eigentlich noch anfänger bin und das dann doch ziemlich kompliziert is

vielleicht ja genau deswegen ;)
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

Werbeanzeige