Pointer auf 2dim. Array

Macbeth23

Grünschnabel
Hi,

wie schaff ich es, dass ich einen Pointer auf einen 2 dimensionalen Array setze (also zB Array[6][7]).
wenn ich einfach Array schreib, erkennt er es scheinbar nicht als Pointer...

Vieleicht noch etwas zu meinem Problem:
Ich will 2 Array-Werte - einer davon 2 dimensional - in zu einer Funkition schicken, und die Funktion sollmir wieder einen 2 dim. Array zurückschicken...

Schemenhaft etwas so:
Code:
int Funktion (int *array, int *Array2Dim)
 {
 	  ...
 	  return Array2Dim2;
 }
 void main ()
 {
 ...
 Array = Funktion(Array, Array2dim);
 ...
 }
 
moin


Kann dir spontan nciht zu deinen ersten Problem helfen, aber vergiss das mit dem return des 2. Array!
Übergib das auch mit nem Pointer und mach das alles innerhalb deiner Funktion.


mfg
umbrasaxum
 
Hy!

Wenn ich das richtig in Erinnerung habe müsste das entweder mit
Code:
funktion1( int *array, int **array) {
...
}

oder

funktion2( int *array, int *array[]) {
...
}
Funktionieren sollten beide.
Weil ein zweidimensionales Array ist ja nichts anderes als ein Array von Pointer, anders gesagt auch ein Pointer auf einen Pointer.

Achja, warum willst du das Array zurückgeben, wenn du einen Pointer übergibst werden sowieso alle Änderungen in diesem Array gemacht, es wird ja keine Kopie angelegt wegen der Funktionsschnittstelle. Du hast das Array das du Änderst ja eh schon, währe ziemlich sinnlos das nochmal zurückzugeben ( und u.U. schlecht für die Performance)

mfg
uhu01
 
Zuletzt bearbeitet:
Danke... werd es dann morgen mal ausprobieren

uhu01 hat gesagt.:
Achja, warum willst du das Array zurückgeben, wenn du einen Pointer übergibst werden sowieso alle Änderungen in diesem Array gemacht, es wird ja keine Kopie angelegt wegen der Funktionsschnittstelle. Du hast das Array das du Änderst ja eh schon, währe ziemlich sinnlos das nochmal zurückzugeben ( und u.U. schlecht für die Performance)

Wusst ich nicht.
Aber jetzt wo du es sagst... klingt logisch
 
Hab ein Programm gemacht, der für Schiffeversenken mehrere Schiffe auf ein Feld verteilen soll.

Nur dauert es ein bisserl länger, bis er mir die Schiffe verteilt hat.
Kann dass an den Funktionen liegen, oder braucht der solange, bis er mal eine richtige Stelle gefunden hat, wo er es verteilen kann.

(Evtl. kann ich ja noch den Code posten)
 
moin


An der Art der Parameter übergabe wird es nicht liegen. Poste dochmal deinen "Verteilungs-Code".


mfg
umbrasaxum
 
ist ein bisserl länger:
Code:
#include <stdio.h>
 #include <stdlib.h>
 #include <windows.h>
 #include <conio.h>
 #include <time.h>
 #define GROESSE 9
 #define ANZAHL 4
 
 
 //Zufallsgenerator
 void initZufallsgenerator()
 {
 	srand( (unsigned)time( NULL ));
 }
 
 //Zufallszahl()
 int Zufallszahl (int iAnfang, int iEnde)
 {
 	int iZufall=0;
 
 	//Zufallszahl
 	initZufallsgenerator();
 	iZufall = (rand() % (iEnde - iAnfang +1)) + iAnfang; 
 			
 	return iZufall;
 }
 
 
 void main()
 {
 	int i, j, x, y, iAnordnung, iBesetzt, iLaenge;
 	int AiSchiffe[ANZAHL]= {2,2,3,4}; //Anzahl ändern NICHT vegessen!
 	int AiFeld[GROESSE][GROESSE];
 
 	//"AiFeld = 0"
 	for (i=0; i<GROESSE; i++)
 		for (j=0; j<GROESSE; j++)
 			AiFeld[i][j]=0;
 
 	//Verteilung
 	for (i=0; i < ANZAHL; i++)
 	{
 		iLaenge = AiSchiffe[i];
 		iAnordnung = Zufallszahl(0,1); //Längs oder Quer?
 
 		if (iAnordnung == 0)			//Verteilung längs
 		{
 		
 			do
 			{
 				x = Zufallszahl(0, (GROESSE-iLaenge));
 				y = Zufallszahl(0, GROESSE);
 		    	for (j=0; j<iLaenge; j++)    //Testet ob belegt
 				{
 		    		if (AiFeld[y][x+j] != 0)	//Belegt
 					{
 						iBesetzt = 1;
 						j = iLaenge;
 					}
 		    		else    		    		//Frei
 						iBesetzt = 0;
 				}
 				
 			}while (iBesetzt != 0);
 			
 			for (j=0; j<iLaenge; j++)	    	//Setzen
 			{
 				AiFeld[y][x+j] = iLaenge;
 			}
 		}
 		else
 		{
 			do
 			{
 				x = Zufallszahl(0, (GROESSE));
 				y = Zufallszahl(0, GROESSE-iLaenge);
 		    	for (j=0; j<iLaenge; j++)    //Testet ob belegt
 				{
 		    		if (AiFeld[y+j][x] != 0)	//Belegt
 					{
 						iBesetzt = 1;
 						j = iLaenge;
 					}
 		    		else    		    		//Frei
 						iBesetzt = 0;
 				}
 				
 			}while (iBesetzt != 0);
 			
 			for (j=0; j<iLaenge; j++)	    	//Setzen
 			{
 				AiFeld[y+j][x] = iLaenge;
 			}
 		}
 	}
 
 	
 			
 	//Vorläufige Ausgabe
 	printf("\t");
 	for (i=0; i<GROESSE; i++)
 		printf("%d\t", i+1);
 	printf("\n");
 	for (i=0; i<GROESSE; i++)
 	{
 		printf("%d\t", i+1);
 		for (j=0; j<GROESSE; j++)
 			printf("%d\t",AiFeld[i][j]);
 		printf("\n");
 	}
 }
 
moin


Das wird daran liegen das er passende Stellen suchen muss.
Habe festgestellt das es unterschiedliche Zeiten sind, was natürlich auch am Zufall liegt, wie er die Schiffe setzen will.


mfg
umbrasaxum
 
Bin vielleicht auf dein Zeitproblem gestoßen,

probier mal die Funktion init... nur einmal in der Hauptfunktion "main" aufzurufen und nicht jedes mal in der Funktion wo du die ZZ generierst (wirst staunen, aber man muss srand(time(NULL)) nur einmal im ganzen Programm aufrufen (glaube ich zumindest)).
 
moin


Hast Recht man muss das nur einmal ausführen.

Mir war eben garnciht aufgefallen das Macbeth23 das jedesmal neu aufruft!
Mit nur einem Aufruf, geht das alles relativ schnell.


mfg
umbrasaxum
 
Zurück