Zeiger auf Zeiger = Hilfe
-
Hallo
Ich hab ein für euch kleines Problem denk ich.
Ich will ein Programm schreiben, welches ein labyrinth am schluss darstellen soll. Jetzt möchte ich einfach nur einmal einen Block ausgeben von '|'.
(zeilen und spalten werden von mir vorher eingelesen).Ich habe einige Unklarheiten über machnche Dinge aufgedeckt.
char **a; a=(char**)malloc(sizeof(char*) * 2);
Nach dem einlesen der Zeilen und spalten:
a=realloc( a, sizeof(char**) * (zeilen*spalten));
for(i=0; i < zeilen; i++) { for(j=0; j < spalten; j++) { *(a+i)='|'; //wieso nicht a[i][j];???????????????????????? *(a+j)='|'; } }
Das ist die Ausgabe
for(i=0; i < zeilen; i++) { for(j=0; j < spalten; j++) { printf("%c", *(a+i)); // Wieso nicht --> ??? oder a[i][j]???? } printf("\n"); }
Bis dahin wird das ausgegeben was ich mir erwarte.
jetzt möchte ich ganz einfach nur das linke obere feld mit einem ' ' inistialisieren aber das haut einfach nicht hin, mit keines der Varianten.
*(*a+0)=' '; a[0][0]=' '; **a=' ';
Ich würde mich sehr über Antworten freuen.
-
flo20 schrieb:
{
*(a+i)='|'; //wieso nicht a[i][j];????????????????????????Der Compiler kennt hier die Größe der 1.Dimension (zeilen) nicht um die richtige Speicheradresse zu berechnen; irgendwie musst du ihm dies bekanntgeben, also entweder als Array
char array[ZEILEN][SPALTEN]; array[0] = "erste Zeile"; array[1] = "zweite Zeile"; ...
oder als Zeiger auf Zeilen:
char **zeiger = malloc( ZEILEN * sizeof(char*) ); zeiger[0] = "erste Zeile"; zeiger[1] = "zweite Zeile"; ...
-
AHH stimmt ja. habs nochmal überarbeitet:
a=(char**)malloc(sizeof(char*) * zeilen); if(a==NULL) { printf("NO ALLOC\n"); } if(a != NULL) { for(i=0; i < spalten; i++) { a[i]=(char*) malloc(sizeof(char)*spalten); } }
jetzt funktioniert es. Ich hab mich schon gefragt warum ich so nicht zugreifen konnte, weil es doch in jedem Buch so gestanden ist.
Danke
-
Der Cast vor dem malloc ist in Standard C überflüssig, daran erkennt man meist C++ Jünger, wo dies zwingend erforderlich ist.
-
Wutz schrieb:
Der Cast vor dem malloc ist in Standard C überflüssig, daran erkennt man meist C++ Jünger, wo dies zwingend erforderlich ist.
Den Satz verstehe ich nicht...
Ach so, jetzt hab ick es ooch jeschnallt...lol
-
Nach einer Überlegungspause wie ich da jetzt weiter machen könnte, bin ich leider zu keinen Ergebnis gekommen. Also ich seh das "Labyrinth" wo noch kein weg programmiert ist. Könnt ihr mir vielleicht nur einen Tipp geben wie man das am besten lösen könnte einen Weg reinzulegen (ich denke da an random, OHNE profisionellen Wissen wie zb. rekursion oder dergleichen!). Ich hab schon einiges ausprobiert aber bin nicht wirklich auf einen schönes Ergebnis gekommen.
danke im voraus !
-
Ich verstehe die Frage da nicht so ganz..
Hast Du ein fertiges Labyrinth und weißt nicht wie man da jetzt einen Spieler reinsetzen soll? Oder willst Du dynamisch zufällige Labyrinthe generieren? (Letzteres wird wohl nicht wirklich simpel oO)
-
ja ich wollte eigentlich ein dynamisches labyrinth erstellen. Vom Benutzer wird die Länge Breite frei gewählt und danach möchte ich ein willkürliches Labyrinth reinlegen unter gewissen Bedingung ( zb. nur alle max. alle 2 schritte kann ein richtungswechsel stattfinden.. (rauf/rechts/runter/links) ).
Ich mein das Programm dient ausschließlich für mich als Übung aber ich dachte mir wenn ich das so anlege wäre es eine größere Herausforderung.
-
Wutz schrieb:
Der Cast vor dem malloc ist in Standard C überflüssig, daran erkennt man meist C++ Jünger, wo dies zwingend erforderlich ist.
wenn dann c++ unwissende, denn man tut nicht in c++ one triftigen grund mallocern tun