Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Verständnisproblem mit einem Zeiger

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
13.06.2020, 18:37 Uhr
MiMü



Hallo,
ich habe ein kleines Testprogramm und verstehe den Rückgabewert nicht. Ich habe einen Zeiger vom Typ Parameter und möchte mir über eine Funktion (lookup) den passenden Parameter, bzw. die Adresse in der Datenbank zurückgeben lassen und dann zwei Werte ändern.
Während des Debuggings kann ich sehen, das die lookup funktion den übergebenen Zeiger mit der gewünschten Adresse beschreibt. Wenn ich dann allerdings die set_parameter_value Funktion aufrufe, wird statt des gewünschten Zeigers auf den Parameter ein Zeiger mit 0x0 übergeben und das geht natürlich schief. Das Testarray sind einfach nur Nummern 1 bis 15



C++:
//global
PARAMETER para_database[50] //Nur der Vollstädnigkeit halber
int test_para_to_write (void)
{
    int tmp=1,i=0;
    static PARAMETER *par;
    while(i<14)
    {
        if(parameter_lookup(testarray[i],par))
        {
            tmp=set_parameter_value(par,0);
            tmp=set_parameter_to_write(par);
        }        
        i++;
    }
    
}



Das Lookup ist auch ganz einfach:

C++:
int parameter_lookup(int number,PARAMETER* target)
{
    int i=0;
    while (i< MAX_PARAMETER)
    {
        if(para_database[i].number==number)
        {
            target=&para_database[i];
            return (1);

        }
        i++;
    }
    return (0);

}



Was mache ich falsch?

Danke Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.06.2020, 17:43 Uhr
ao

(Operator)


parameter_lookup soll par by-reference übergeben kriegen und nach außen wirksam ändern.

Wenn du einen int by-reference übergeben willst, musst du einen pointer auf int übergeben.
Wenn du einen pointer auf PARAMETER by reference übergeben willst, musst du was übergeben? Richtig: einen pointer auf pointer auf PARAMETER:

C++:
int parameter_lookup(int number,PARAMETER** target);

Und dann:

C++:
*target=&para_database[i];


Dadurch, dass du nur einen einfachen Pointer übergibst, bleibt die Änderung an target lokal in der Funktion, und der äußere Parameter par wird nicht beeinflusst.

Das gilt für C.

Wenn das C++ ist, solltest du dir was über C++-Referenzen anlesen, dann kannst du auch eine Referenz auf einen Pointer übergeben, das macht genau, was du willst und vermeidet den Knoten im Hirn.

Übrigens: Warum deklarierst du "static PARAMETER *par;"? Warum static?

Dieser Post wurde am 16.06.2020 um 17:46 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


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: