zeiger in void um wert zu verändern

reBourne

Erfahrenes Mitglied
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 ^^
 
Probier einmal:

in der Klasse:
Code:
void aender_das(char **zeiger) {strcpy(*zeiger,"blabla"); }   
//**zeiger ist einpointer auf ein array

Aufruf:

Code:
char *abc;
aender_das(&abc);   //übergibt die Adresse des Arrays der Funktion
Ich hoffe es funktioniert
 
Spaco hat gesagt.:
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 :/

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:
#include <iostream>

using namespace std;

void aender_das(char* zeiger){

        for(char* pos = zeiger; *pos != 0; pos++)
                *pos = 'a';          
}

int main(){

        char word[] = "hallo";
        aender_das(word);    
        cout << word << endl;
        

}

Gruß

RedWing
 
colt4ever hat gesagt.:
Probier einmal:

in der Klasse:
Code:
void aender_das(char **zeiger) {strcpy(*zeiger,"blabla"); }   
//**zeiger ist einpointer auf ein array

Aufruf:

Code:
char *abc;
aender_das(&abc);   //übergibt die Adresse des Arrays der Funktion
Ich hoffe es funktioniert


Code:
#include <iostream>

using namespace std;

void aender_das(char* zeiger){

        strcpy(zeiger, "test");
}

int main(){

        char word[] = "hallo";
        aender_das(word);
        cout << word << endl;
        

}

Das sollte auch reichen, wichtig is nur das er den Inhalt nicht die Addresse
ändert.

Gruß

RedWing
 
Zurück