Pointer



  • const char *cp1 = "A string example"; //16 Zeichen lang
    char *cp2 = "A different string"; //18 Zeichen lang8
    

    du hattest es doch richtig 🙂

    //Edit: In Zeile 15 fehlt ein Semikolon am Ende



  • OK, habe den Code nun 2 Posts weiter oben editiert, aber der Fehler bleibt bei beiden Pointern bestehen. 😞

    L. G.
    Steffo



  • Steffo schrieb:

    OK, habe den Code nun 2 Posts weiter oben editiert, aber der Fehler bleibt bei beiden Pointern bestehen. 😞

    L. G.
    Steffo

    Du musst die eckigen Klammern hinter cp1 und cp2 weglassen.



  • Oh, stimmt! Ist ja kein Array! 😕
    THX! 🙂

    L. G.
    Steffo



  • Steffo schrieb:

    Oh, stimmt! Ist ja kein Array! 😕
    THX! 🙂

    L. G.
    Steffo

    Ein String ist ein Array. Schließlich deklarierst du mit char * einen Zeiger auf ein Array von char. Aber das führt wohl zu weit.



  • Stimmt auch nicht ganz, mit * deklarierst du einen Zeiger auf ein char. Ein Zeiger auf ein Array von char sieht so aus: char (*p)[]; .

    Aber das führt definitiv zu weit 😉



  • Ich habe zu dem geposteten Beispiel im Buch noch eine Frage:

    const char *cp1 = "A string example"; //16 Zeichen lang
        const char *cp2 = "A different string"; //18 Zeichen lang
    
    	char largeStr[16 + 18 + 2];
    
    	strcpy(largeStr, cp1);
    	strcat(largeStr, " "); //Ein Leerzeichen am Ende von largeStr einfügen
    	strcat(largeStr, cp2);
    
    	//Gibt "A string example A different string" aus.
    	cout<< "\nlargeStr: " << largeStr;
    

    Bei

    char largeStr[16 + 18 + 2];
    

    werden am Ende 2 Zeichen hinzugefügt. Eins fürs Leerzeichen und das andere? Für das abschließende Nullzeichen? Im Buch steht's nicht drin!

    Ferner habe ich bei der Autovervollständigung erkannt, dass strcat(<#char * #>, <#const char * #>) beim ersten Parameter ein char * verlangt, aber ich habe largeStr nicht wirklich als Pointer deklariert und wieso muss der zweite Parameter konstant sein?!

    EDIT: Ich merke gerade, dass der Code auch dann geht, wenn der zweite Parameter nicht konstant ist.

    Danke wieder im Voraus!

    Liebe Grüße
    Steffo



  • Steffo schrieb:

    Bei

    char largeStr[16 + 18 + 2];
    

    werden am Ende 2 Zeichen hinzugefügt. Eins fürs Leerzeichen und das andere?

    Das steht für das '\0' (0-Terminierungs-)Zeichen, das am Ende angehangen werden muss



  • const char* ist ein Zeiger, dessen Ziel (in dem Fall ein String) nicht verändert werden kann. Dadurch das die Funktion einen const char* als Parameter übernimmt garantiert sie dir, dass sie den String nicht verändern wird, sie kann es schlicht nicht. Wenn du statt dessen einen char* übergibst wird das implizit einfach zu einem const char* konvertiert, denn Schreibschutz hinzufügen ist ungefährlich. Andersherum geht das dagegen nicht, einen const char* kann man nicht ohne weiteres in einen char* konvertieren.



  • hgjghj schrieb:

    Ein String ist ein Array. Schließlich deklarierst du mit char * einen Zeiger auf ein Array von char.

    Ein Zeiger vom Typ char* ist ein Zeiger, der auf ein char-Objekt zeigen kann -- wie zB das erste Element eines char-Arrays. Es ist aber kein Zeiger auf ein Array. Ein Zeiger auf ein char-Array ist vom Typ char(*)[N] , wobei N die Anzahl der Elemente des Arrays ist.

    #include <iostream>
    
    int main() {
      const char *p = "p zeigt auf das erste Zeichen";
      const char (*q)[31] = &"q ist ein Zeiger auf ein Array";
      std::cout << p << '\n';
      std::cout << *q << '\n';
    }
    


  • Danke, für eure Antworten, hat mir wirklich weitergeholfen! 🙂

    EDIT: Ich sehe gerade, dass die Antwort im Buch auf der nächsten Seite stand. 😕

    L. G.
    Steffo


Anmelden zum Antworten