Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » adressübergabe an funktion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
13.01.2004, 13:07 Uhr
~nubi
Gast


hallo, ich bin neu in c++ und habe eine frage:

ich habe ein 2d array, quasi matrix und möchte dieses zur bearbeitung an eine funktion übergeben.

double[3][3];

ich möchte allerdings nicht das ganze array, sondern vielmehr die adresse übergeben.
die funktion soll dann über die adrese auf das array zugreifen können.

wie läßt sich sowas in c++ realisieren?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.01.2004, 13:23 Uhr
Oliver
S2-Pixelgeneral


Hallo,

ein Array ist meines Wissens nach ein Zeiger also eine Adresse und zwar auf das 1. Element von dem Array, wenn du jetzt schreibst:


C++:
funktion(int ** arr_parameter);

int array[3][3];
funktion(array);



übergibst du also die Adresse.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 13.01.2004 um 13:24 Uhr von Oliver Müller editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.01.2004, 13:29 Uhr
~nubi
Gast


wenn ich das mache (anstelle von int double)
bekomme ich einen compiler error:

cannot convert parameter 1 from 'double [3][3]' to 'double ** '

mit adresseoperator:

cannot convert parameter 1 from 'double (*)[3][3]' to 'double ** '

hmmm, weißt du woran das liegt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.01.2004, 13:57 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


naja weil ein double[3][3] ein bisschen was anderes ist als ein double**

probiers mal mit nem cast...
also

C++:
myfunktion((double**)array,....);


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.01.2004, 13:58 Uhr
virtual
Sexiest Bit alive
(Operator)


Hallo,

Ein statisch definiertes Array der Form

C++:
int array[10][14];


Ist zuweisungkompatibel mit einem int*. Daher funktioniert das nicht. Ist aber völlig unerheblich: Arrays werden immer als Pointer übergeben, daher ist

C++:
void f(double g[3][3])
{
}


Der parameter g immer ein Pointer auf das übegebene Array, niemals eine Kopie.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.01.2004, 14:05 Uhr
~nubi
Gast


hallo virtual!

weiß nich genau was du meinst.
hier mein code


C++:
void matrixausgabe(double** matrix, unsigned int sizex, unsigned int sizey)
{
    unsigned int x,y;

    for (y=0;y<sizey; y++)
    {
        for (x=0; x<sizex; x++)
        {
        cout<<matrix[x][y];
        }
        cout<<endl;
    }

}




C++:
/* -------------------------------------------------------
* Main
*/
//-----------------------------------------------------

int main(int argc, char* argv[])
{
    // Größe des zu erstellenden Arrays
    /*int size_x = 512;
    int size_y = 512;
    int size_z = 100;

    // Anzahl der Array-Durchläufe
    int n = 5;

    // Test starten
    performancetest(size_x, size_y, size_z, n);*/

    
    double gaussmatrix[3][3];
    
    
    gaussmatrix[1][1] = (double)1/16;
    gaussmatrix[2][1] = (double)2/16;
    gaussmatrix[3][1] = (double)1/16;
...

    matrixausgabe(k_gauss,3,3);

    return 0;

}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.01.2004, 14:12 Uhr
RHBaum




Zitat:

funktion(int ** arr_parameter);


Wie oliver richtig zitierte, die variable eines Arrays repraesaentiert die Adresse des ersten Elementes. Die adresse eines Elementes ist immer vom Typ "zeiger auf Element" also * Element, und nicht "Zeiger auf Zeiger eines elementes" ...

in dem fall, waere also der richtige Funktionskopf


C++:
funktion(int * arr_parameter);



Noch ne Bemerkung am Rande ... bevor sie von den anderen kommt ...

Was anderes ....Du lernst C++ ?
Arbeiten mit C-Arrays unter C++ ist meist sehr fehleranfaellig.
Fuer Uebeungen, um dich mit Arrays allgemein auseinanderzusetzen, und grundlegende C-Funktionalitaet zu erlernen (was auch unter c++ oft noch gebraucht wird), ists durchaus ok ...

Spaeter solltes zumindest Parameterubergaben als C-Arrays vermeiden, und zumindest dein array in ne klasse kapseln ... und die klasse uebergeben. Oder vorgefertigte Arrays aus den Libs nehmen ....

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.01.2004, 14:23 Uhr
~nubi
Gast


ich habe aber irgendwo gelesen, dass man bei zweidimensionalen arrays dann ein

int **

verwendet.

geht das ganze nun nur mit int?? ich brauch nämlich double.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.01.2004, 14:24 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was habt ihr denn alle aufeinmal mit den Matrizen?
Ist das gerade ne Modeerscheinung? Bei meinen Matrizenrätseln wollte ja kaum einer mitspielen


zu deiner frage mit dem int**

das geht natürlich auch mit double**
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 13.01.2004 um 14:24 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.01.2004, 14:27 Uhr
~nubi
Gast


naja aber warum geht dann obiger code nicht?

mal abgesehen davon dass es statt "k_gauss" "gaussmatrix" heißen müsste?

ich bekomme immer diesen casting error.
wenn ich nun (double**) davor schreibe bekomme ich dann ein speicherfehler bei ausführung.
also ich weiß auch nich
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: