Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Rückgabe aus Funktionen

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 <
000
03.06.2005, 11:27 Uhr
~drfreud
Gast


Hallo,

bei mir ist noch ein zweites Problem aufgetaucht. Wie man mehrdimensionale Arrays einer Funktion übergibt weiß ich, aber wie man sie wieder an die main() zurückgibt, da tappe ich noch im Dunkeln.

Ich habe gelesen dass ich das wohl über Zeiger relgeln müsste, aber leider hat mir alles was ich bisher darüber gefunden habe nichts genützt.

Wie müsste ich ein mehrdimensionales Array in einer Funktion deklarieren und dann entsprechend in der main() Funktion aufrufen?



C++:
void test(string restzeile, int base[500][500])
{
      
      int i, j, pos, elementint, z;
      while(restzeile!="")
      {  
         i++;
         char elementzeile[99];
         int pos = restzeile.find(',');
         if (pos==-1) pos=1;
         for (int l = 0; l<pos; l++)
         {
             elementzeile[l] = restzeile[l];                             //Zeichenkette teilen
             z=l;
         }
         elementzeile[z+1] = '\0';
            restzeile.erase(0, pos+1);
            //cout<<restzeile<<"\n";
         elementint = atoi(elementzeile);                               //Array in String umwandeln
         base[i-1][j]=elementint;
         //cout<<elementint<<" ";
      
      }
}



das ist z.b. eine Funktion mit den beiden Übergabewerten restzeile und base[500][500]. Nun soll aber in der Funktion das Base Array global geändert werden. Wie kann ich das machen und wie sieht dann der Funktionsaufrauf in der main() aus?

wäre euch sehr dankbar wenn ihr helfen könntet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.06.2005, 13:48 Uhr
Tommix



Hallo,
das ist schon korrekt so. Wenn die Funktion ein Element von base ändert, betrifft diese Änderung auch das Array, welches beim Aufruf übergeben wurde.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.06.2005, 18:11 Uhr
~drfreud
Gast


Na die Übergabe an die Funktion ist ja nicht das Problem, das klappt ja auch, aber mein Problem ist, dass das Array auch noch in der main() gebraucht wird und das geht eben so nicht!!!

In der Funktion fülle ich das Array mit Werten und später brauch ich eben das Array noch mit den geänderten Werten in der main().

Also die Frage ist, wie kann ich das geänderte Base Array an die main() zurückgeben???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.06.2005, 18:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


deklarier die funktion mit int *base[500][500] als paramter, zuweisen dann mit *base[i-1][j]=
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.06.2005, 08:26 Uhr
Tommix






C++:
#include <stdio.h>

void AendereArray(int a[3][3])
{
    a[1][1] = 100;
}

int main()
{
    int x[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
    AendereArray(x);
    printf("%d\n", x[1][1]);

    return 0;
}



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.06.2005, 09:08 Uhr
Spacelord
Hoffnungsloser Fall


@drfreud:
Was Tommix dir damit sagen möchte ist dass,z.B. in seinem Beispiel x, das übergebene Array vom Compiler ohnehin als Zeiger interpretiert wird.
In seinem Beispiel könnte der Funktionskopf auch so aussehen:

C++:
void AendereArray(int (*a)[3])



Der Parameter ist also ein Zeiger auf ein int Array mit 3 Elementen!
Mach dir klar dass int (*a)[3] etwas anderes ist als int *a[3].
int *a[3] ist ein Array von 3 Zeigern auf int.

PS: Die erste Größenangabe bei Tommix seinem Funktionsparameter könnte auch wegfallen.
Also :

C++:
void AendereArray(int [][3])


Die zweite Größenangabe ist Pflicht.


MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 04.06.2005 um 09:09 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.06.2005, 16:03 Uhr
~drfreud
Gast


also wie tommix es geschrieben hat, sagte zwar der Compiler nix, aber das Programm stürzte dann an der Stelle wo die Funktion zugegriffen wurde ab.

Hab daraufhin auch mal probiert das Array über int *(a)[3] z.b. zu definieren, aber dann klappt der Aufruf in der main() nicht mehr...also Umwandlungsfehler!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: