Feld übergeben
-
Hi,
ich bin grad wieder dabei mich in C einzufinden.Aber zu meiner Frage.
Wie kann ich ein Array übergeben?In Java mach ich das so
int[][] field = new int[256][256];
int[][] getField() {
return field;
}
oder halt
void setField(int[][] field) {...}aber wie kann ich sowas in C++ machen?
-
// also ich wuerde entweder... void setField(int *field[]) // oder void setField(int **field) // schreiben
-
MadDog00Z schrieb:
Hi,
ich bin grad wieder dabei mich in C einzufinden.Es gibt auch ein C-Forum.
Aber zu meiner Frage.
Wie kann ich ein Array übergeben?In Java mach ich das so
int[][] field = new int[256][256];
int[][] getField() {
return field;
}Das ist legaler Code. Allerdings hast du das Problem, dass der User daran denken muss, den Speicher wieder freizugeben. Die einzige Möglichkeit um das Problem zu umgehen die mir einfällt ist, dass der User der Funktion schon das Array per Referenz oder Pointer übergibt. Dann ist der Rückgabewert void. Im neuen Standard wird es AFAIK ne andere Möglichkeit geben.
aber wie kann ich sowas in C++ machen?
Aha, jetzt fragst du auf einmal nach C++. Dann geb ich dir auch ne C++-Antwort. Es gibt in C++ Container wie Vektoren oder Listen. Die kannst du AFAIK (kenn Java nicht so gut) handhaben wie Arrays in Java, d.h. es gibt z.B. auch die Memberfunktion length(). Generell solltest du in C++ sowieso die Finger von Arrays lassen. Die STL-Container haben auch dynamische Speicherallokierung.
-
Michael E. schrieb:
Generell solltest du in C++ sowieso die Finger von Arrays lassen.
Aber ich brauch die Arrays für die Bildverarbeitung.
-
Ja? Wieso?
-
Am besten du benutzt verschachtelte Vektoren:
#include <vector> using namespace std; //... typedef vector<vector<int> > int_feld; void foo(feld &bar) { //mach irgendwas mit bar... } int main() { feld vec(256); //äußerer Vektor mit 256 inneren Vektoren for(feld::size_type i=0; i<256; ++i) { vec[i].resize(256); //innere Vektoren, hier ebenfalls 256 Elemente } foo(vec); //... return 0; }
EDIT: Shit, hab übersehen, dass du auf Arrays angewiesen bist...
-
Ich frag mich nur immer noch, wie man auf Arrays angewiesen sein soll...
-
naja, ich wüsste sonst nicht wie man "gut" mit Bildern arbeiten kann.
Ich Java hatte ich immer Arrays.
int pixel[x][y] - so kann ich einfach auf jedes Pixel zugreifen.Wenn Du ein besseren Weg kennst dann schreib ihn mal auf.
-
int pixel[x][y] - so kann ich einfach auf jedes Pixel zugreifen.
Wenn Du ein besseren Weg kennst dann schreib ihn mal auf.
Das geht mit verschachtelten Vektoren genauso, mal abgesehen davon, ob das für deine Zwecke sinnvoll ist.
Mfg, smasher1985
-
Steven schrieb:
Am besten du benutzt verschachtelte Vektoren
Man sollte sowas aber nicht übertreiben. Stell dir vor, du hast ein Bild mit 1024x1024 Auflösung. Dann wird allein schon mit einer Instanz dein Speichermanager mit 1025 Einträgen zugemüllt.
Michael E. schrieb:
Ich frag mich nur immer noch, wie man auf Arrays angewiesen sein soll...
Ich frage mich, wie man ohne auskommen soll. Hast du denn noch nie zB Strings benutzt? Oder bist du jemand, der dann immer solche Sachen macht
int var_1; int var_2; int var_3; //...
Für solche Sachen, was MadDog00Z vorhat, würde ich auf eine speziell für 2-dimensionale Arrays abgestimmte Klasse zurückgreifen.
Für den Anfang kann man aber auch mal sehen, wie weit man mit std::vector<int[irgendwas]> kommt.