Array uebergeben?
-
huzi schrieb:
int *arr() { int val[]; return val; // Das kann nicht funktionieren, weil... }
...weil ein returnwert nur eine einfache Variable, also kein array sein kann.
Möglich sind dh. nur: int, double, float, char,...Ich würde für die Parameter einen eigenen Dateityp definieren...
zB.:typedef struct { char array[10][10]; int laenge; int breite; }matrix; void eingabe(matrix *xyz); //Dann wird kein Rückgabewert benötigt
-
warum machst du das nicht mit referenzen, das sollte doch auch gehen?
-
Weil es in C keine Referenzen gibt, vermutlich. :p
-
...
schade eigentlich. na denn könnte man es eben in c++ so machen. und wieder was dazu gelernt
-
Wieso die Variablen für Breite und Höhe ?
Versuchs mal dynamisch mit malloc.
Alles weitere ergibt sich auf der referentierung der pointer resp. pointer auf pointer etc...
-
So, hi nochmal ich, der Hilfesuchende...
Sagt mal, nachem es hier jetzt schon 20 mal aufgetaucht ist... dieses "malloc",
was ist das genau und wie benutzt man es?Würde aus dem Kontext schließen das es damit möglich ist ein array(oder meinetwegen auch matrize) ohne explitzite breite und hoehe zu initialisieren.
Koennte durchaus sein das mir das reicht...
Also, man muss in dem Programmteil in dem ich das array übergeben will halt sagen können, das er das array mittels übergebener breite und hoehe komplett durchgehen soll (halt mit 2 geschachtelten schleifen die einmal bis maxbreite und maxlänge gehen)
also nochmal in pseudocode
Prog 1:
fülle eine matrize mit den werten aus eingabedatei
erechne die breite der benötigen matrize
erechne die höhe der benötigten matrizeProg 2:
benutze die Werte die Prog 1 gerade errechnet hat
for (int i=0;i<breite;i++){
for (int j=0;j<breite;j++){
mache was mit matrize an Stelle [i][j]
}
}Hoffe erneut das das einigermaßen verständlich war
und danke euch wchomal im vorab.Cuthalion
-
Für deinen ersten Teil brauchst du dann wirklich malloc(). Diese Funktion reserviert dynamisch Speicher. Sie ist eigentlich auch recht leicht zu benutzen. Du übergibst ihr einfach die Anzahl an Bytes, die du reservieren willst. Als Rückgabewert erhältst du die erste Speicheradresse deines reserviereten Speichers. Diese Adresse weißt du normalerweise einem Zeiger zu.
Für deinen Fall (2 dimensional) sollte es in etwa so aussehen:
unsigned int breite, hoehe, i; int ** array; printf("Breite: "); scanf("%ud", &breite); printf("Höhe: "); scanf("%ud", &hoehe); array = malloc(sizeof(* int) * hoehe); for(i = 0; i < hoehe; ++i) { array[i] = malloc(sizeof(int) * breite); }
-
@AJ: Vergiss bitte bei deiner nächsten Erklärung von malloc() nicht, auch free() zu erwähnen. So holt sich der Junge doch die schönsten Memory-Leaks ins Haus.
Also: Jeder Speicherbereich, der mit malloc() angefordert wurde, muss, wenn er nicht mehr benötigt wird, mit free() wieder freigegeben werden.
Kurzes Beispiel:char *szText; szText = malloc(81); /*mache was mit szText*/ free(szText);
Grüße
Deadlef
-
[quote="chille07"]
huzi schrieb:
[cpp]
...weil ein returnwert nur eine einfache Variable, also kein array sein kann.
Möglich sind dh. nur: int, double, float, char,...
[/cpp]Quatsch. Was ist denn bitte ein Array? Im Grunde nichts anderes als ein Pointer, und ein Pointer IST ein primitiver Datentyp.
Der Code ist aus 2 anderen Gründen falsch:
1. kann int arr[] nicht funktionieren, weil zur Compilezeit die Größe nicht feststeht und
2. Versucht wird, die Adresse einer lokalen Variable zurückzugeben. D.h. nach dem Aufruf der Funktion zeigt der Zeiger auf einen Speicherbereich, der dir NICHT mehr zur Verfügung steht.
-
@Deadlef
Stimmt hatte ich vergessen zu erwähnen. Allerdings ist es nicht dringend notwendig das free() zu machen, denn moderne Betriebssysteme regeln das selber und das Programm kann dadurch um einiges schneller beendet werden, wenn entsprechend viel Speicher reserviert wurde.
-
So, als anfänger hab ich nur die hälfte verstanden.
Das ist am Afang dvoid Ausgabe(double *)array,char);
Dann kommt die main:
int main{ double array[5]; Ausgabe((double *)array,buchstabe); }
Und dann die Methode:
void Ausgabe((double *)array,buchstabe){}
Danke.