mehrdimensionale arrays, warum kann compiler größe nicht errechnen
-
ich bin fast verrückt geworden als ich data so werte geben wollte:
float data[][] = {{0,0},{0,1},{1,0},{1,1}};dabei ist dass doch mit eindim. arrays möglich...
float data[4][2] = {{0,0},{0,1},{1,0},{1,1}}; float lsg[] = {0,1,1,1};warum nicht bei mehrdimensionalen?
im übrigen bekomme ich fehler wenn meine funktionsparameter nicht auch skalar sind:
void perzeptron::training(float data[4][2], float *lsg), warum darf ich kein
void perzeptron::training(float **data, float *lsg)verwenden?
ein besseres beispiel wäre ncoh dass hier:
#include <cstdlib> #include <iostream> using namespace std; int fkt(char **b) { cout<<b[0]<<endl;; cout<<b[1]<<endl;; } int main(int argc, char *argv[]) { char **temp; char data1[2][6] = {{"hallo"},{"ciao"}}; char **data2; data2 = new char*[2]; data2[0] = "hallo"; data2[1] = "ciao"; *temp = data1[0]; temp[1] = data1[1]; fkt(temp); //fkt(data1); //fehler fkt(data2); system("PAUSE"); return EXIT_SUCCESS; }ich weiß zwar das ein [][] nicht ein ** ist, und das auch anderer maschienencode erzeugt wird, aber warum ist der compiler nicht in der lage bei funktionsaufrufen zu konvertieren, zumal eine simple zuweisung von passenden objekten auchmöglich ist?
-
hi, wieso nimmst du nicht einfach container? wie zB vector.
die kann man auch ineinander verschachteln, und lassen sich meiner meinung nach leichter handhaben. wenn schon c++, dann richtig :p

-
ich fand lediglich das prinzip interessant!
-
Generell: Multidimenisonale Arrays sind fast immer eine schlechte Idee. Die Berechnung des Zugriffspunkte ist fuer die CPU immer recht aufwenig. Ausserdem ist das Allocieren und Aufraeumen des Heaps umstaendlich. Es ist fast immer besser ein Array zu verwenden (oder eine Container-Template - z.B. Vector) und dann den Zugriffspunkt mittels einer einfachen Multiplikations zu errechnen.