dynamische mehrdymensionale Array an Funktion übergeben
-
Moin
Ich habe jetzt mal (wieder) angefangen C zu lernen. Bin nun bei den mehrdymensionalen Arrays angelangt und habe dazu eine kleine Übung geschrieben. Es funktioniert alles bis auf ein kleines aber wichtiges Detail...
Das Ziel des Programmes ist es ein mehrdymensionales Array auszulesen und je nach Wert im Array ein anderes Symbol auszugeben. Nun habe ich eine kleine Funktion geschrieben, welche das gesamte ausliest und zeichnet. Nur will die Funktion, das ich ihr die Grösse einer Dimension des Arrays mitgebe. Nun war aber mein Ziel, dass das Programm keinerlei Angaben benötigt sondern die Grösse selber ausrechnet.
Ist es möglich entweder die in main() ausgerechnete Grösse global bekannt zu machen oder der Funktion erlauben auch ohne feste Grösse zu funktionieren?
// Grundfunktionen wie printf() #include <stdio.h> // Für die Wurzelberechnung #include <math.h> // Gegen das ewig lange schreiben von unsigned..... nur noch lint :) typedef unsigned short int lint; // Funktionskopf zum Zeichnen der Felder void zeichne_feld(lint (*feld)[], lint anzahl); int main(int argc, char *argv[]) { // Zwei Dimensionales Array (Insgesamt 9 Felder) lint karte[3][3] = {{1,0,1},{0,1,0},{1,0,1}}; // Anzahl der Felder der Dimensionen im Array bestimmen (--> Hier wird die Grösse ausgerechnet <--) lint anzahl_felder = sqrt(sizeof(karte) / sizeof(lint)); // Zeiger für Array mit der bestimmten Grösse erstellen lint (*zgr)[anzahl_felder]; // Zeiger dem Array zuweisen zgr=karte; // Funktion aufrufen zeichne_feld(zgr, anzahl_felder); return 0; } void zeichne_feld(lint (*feld)[3](--> Hier muss ich einen festen Wert eingeben<--), lint anzahl) { // Die zwei Variablen auf 0 setzen lint x=0,y=0; // Solange nicht alle Linien gezeichnet wurden for(x;x<anzahl;x++) { // Solange nicht alle Felder einer Linie gezeichnet wurden for(y;y<anzahl;y++) { // Welches Symbol soll gezeichnet werden switch(feld[x][y]) { case 0: printf("O"); break; case 1: printf("X"); break; default: printf("\?"); break; } } // Nach einer Linie y (Feld) wieder auf 0 setzen y=0; // Und eine Linie runter gehen printf("\n"); } }
-
Ei Tipp von mir:
Im Code Kommentare zu schreiben ist es ratsam, weil man dadruch manche Sachen lesbarer macht. Aber....wenn man jede einzelne Zeile kommentiert, wird das Programm unleserlich. Gewöhn dir das ab und Kommentiere nur das nötigste! Ansonsten wirst du den Wald vor lauter Bäume nicht sehen können.
-
Hi,
es sollte funktionieren, wenn du das Array als Zeiger auf einen Zeiger übergibts:
lint **feld(--> Hier muss ich einen festen Wert eingeben<--), lint anzahl)