1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

zeiger in void um wert zu verändern

Dieses Thema im Forum "C/C++" wurde erstellt von reBourne, 2. Februar 2005.

  1. reBourne

    reBourne Grünschnabel

    jo moin

    ich hab folgendes prob:

    ich möchte in eine klasse in void einen wert verändern, der nicht klassenintern ist. also dachte ich dabei an einen zeiger auf die entspr. stelle im speicher und überlegte, es könne so funktionieren:

    void aender_das (char* zeiger) { zeiger = "blabla"; }

    und habe meinetwegen im hauptprogramm

    char abc[];
    aender_das(&abc);

    so in etwa stelle ich mir das vor, aber was auch immer ich ausprobiere, ich krieg das einfach net hin :/
    mit den ganzen möglichkeiten von wegen [] und * und & und unsigned und const komme ich sowieso schon nicht so ganz klar, ich weiß zwar in etwa was sie bewirken aber dauernd kriege ich fehler wie char * kann char nicht zugewiesen werden usw. und kann damit dann meistens nix anfangen

    deshalb hätte ich das gerne mal genauer erklärt. hoffe, das problem ist verständlich genug ^^
  2. colt4ever

    colt4ever Gast

    Probier einmal:

    in der Klasse:
    Code (Text):
    1.  
    2. void aender_das(char **zeiger) {strcpy(*zeiger,"blabla"); }  
    3. //**zeiger ist einpointer auf ein array
    4.  
    Aufruf:

    Code (Text):
    1.  
    2. char *abc;
    3. aender_das(&abc);   //übergibt die Adresse des Arrays der Funktion
    4.  
    Ich hoffe es funktioniert
  3. RedWing

    RedWing Erfahrenes Mitglied

    Ja is auch klar du übergibst deiner Funktion aender_das eine Addresse
    nämlich die auf die abc zeigt.
    Dann weist du deinen Pointer zeiger zeiger = "blabla"; eine andre Addresse
    zu nämlich die Anfangsaddresse von "blabla".
    Somit weißt du zeiger ein komplett neues Objekt einschließlich neuer
    Addresse zu.

    Wenn du es ändern möchtest hat colt4ever schon die richtige Lösung,
    oder du veränderst den Inhalt und weißt dem Objekt zeiger nicht ne
    komplett neue Addresse zu.
    Ungefähr so:

    Code (Text):
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. void aender_das(char* zeiger){
    6.  
    7.         for(char* pos = zeiger; *pos != 0; pos++)
    8.                 *pos = 'a';          
    9. }
    10.  
    11. int main(){
    12.  
    13.         char word[] = "hallo";
    14.         aender_das(word);    
    15.         cout << word << endl;
    16.        
    17.  
    18. }
    Gruß

    RedWing
  4. RedWing

    RedWing Erfahrenes Mitglied


    Code (Text):
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. void aender_das(char* zeiger){
    6.  
    7.         strcpy(zeiger, "test");
    8. }
    9.  
    10. int main(){
    11.  
    12.         char word[] = "hallo";
    13.         aender_das(word);
    14.         cout << word << endl;
    15.        
    16.  
    17. }
    Das sollte auch reichen, wichtig is nur das er den Inhalt nicht die Addresse
    ändert.

    Gruß

    RedWing
  5. reBourne

    reBourne Grünschnabel

    Dankeschön,hat funktioniert. :p

Diese Seite empfehlen