Eine frage zu Funktionen und pointern



  • Hi, Ich arbeite gerade ein paar Tutorials durch und da hatte ich mal ne frage zu etwas^^

    #include<iostream>
    
    using namespace std;
    
    void hello(char *str)// Hier ist mein Problem.
    {
    	cout << "hello " << str << endl;
    
    };
    
    int main()
    {
    	hello("world");
    }
    

    wenn ich nämlich keinen Pointer verwenden (also das Sternchen weg mache) kommt eine Fehlermeldung das die Konvertierung des Parameters 1 von 'const char [6]' in 'char' nicht möglich ist.

    Ich hoffe mal das ist überhaupt eine pointer und mann kann das so sagen^^

    fg Wurst 😛



  • Ja, das ist ein Pointer auf char. Nimmst du den Stern weg, dann hast du einfach ein char. Ein Array von chars kann nicht in ein char konvertiert werden. "Konvertierst" du den Array in einen Pointer, so enthält der Pointer die Adresse des ersten chars im Array^^



  • hmmmmm ok Danke... ich bin noch relativ neu auf dem Gebiet^^ deshalb noch ne dumme frage^^

    Ich dachte immer Arrays werden so gebildet:

    char Word[5] (0 = "hallo", 1 = "Bye", ...)
    

    Oder hab ich mir da was falsch gemerkt? 😕
    Aber falls es richtig ist warum ist den dann str ein array?

    fg Wurst 😃



  • Nicht in C++. In C++ haben Arrays immer einen fortlaufenden Speicherbereich, der bei 0 anfängt.

    Wenn du einen anderen Schlüssel haben willst, kannst du z.B eine std::map nehmen. Allerdings ist das einfügen nicht so konfortabel, wie in andere Sprachen, wie z.B PHP oder Python.

    So fügt man es normalerweise hinzu:

    char array[] = {'a','b','c'};
    

    Das geht auch:

    const char* array[] = {"hallo","hmm","apfel","schnee"};
    

    Damit hast du ein Array von C-Strings.



  • wurstuk schrieb:

    void hello(char *str)// Hier ist mein Problem.
    {
    	cout << "hello " << str << endl;
    
    };
    

    Und hier solltest du besser einen const char* statt eines char* nehmen, da du die Zeichen in der Funktion nicht veränderst. Streng genommen würde sogar ein const char* const gehen... 😉

    Du musst einfach aufpassen, wenn du Stringliterale wie "hello" übergibst, denn auf diese darfst du nur lesend zugreifen.


Anmelden zum Antworten