Zeiger alloziert automatisch Speicher?



  • Habe da mal eine Verständnisfrage, wieso geht denn das:

    int main(void)
    {
       char *za[10]; /* Zweidimensionales char - Array */
       za[3] = "wo kommt der Speicher her?";
       printf("(%s)\n", za[3]);
       return 1;
    }
    

    ich hätte erwartet, dass ich irgendwie erstmal Speicherplatz allozieren muss

    za[3] = malloc(strlen("wo kommt der Speicherplatz her?")+1);
    stcpy(za[3], "wo kommt der Speicherplatz her?");
    

    Aber es tut auch ohne 😕



  • char *za[10] ist ein eindimensionales char* - Array.
    Stringliterale sind auch vom Typ char* und befinden sich an einer festen Adresse.



  • eine zeichenkette adressieren:
    char* za = "zeichenkette mit irgendeinem mehr oder weniger sinnvollem inhalt";

    10 zeichenketten adressieren:
    char *za[10];
    za[0] = "...
    ...



  • Stringliterale sind auch vom Typ char* und befinden sich an einer festen Adresse.

    Sie werden die Adresse schon nicht wechseln. So flatterhaft sind die nicht.

    Alloziert wird üblicherweise nur, wenn man nicht zur Compilezeit sagen kann, wieviel man brauchen wird. Literale machen das nicht notwendig, die Länge soll ruhig der Compiler abzählen.

    Denk lieber drüber nach, was das folgende Programm ausgibt:

    int main(void)
    {
       char *za[10]; /* Zweidimensionales char - Array */
       za[2] = "wo kommt der Speicher her?";
       za[3] = "wo kommt der Speicher her?";
       printf("%d\n", za[2] == za[3]);
       return 1;
    }
    


  • die Zeichenkette gibt im prinzip nen "const char*" zurück



  • implizit-flamer schrieb:

    Denk lieber drüber nach, was das folgende Programm ausgibt:

    Implementation defined.

    (Nein, er gibt natürlich nicht genau diese Zeile aus 🤡)



  • DataByte schrieb:

    die Zeichenkette gibt im prinzip nen "const char*" zurück

    Emmm, hä?



  • Implementation defined.

    Hab ich mir gedacht, daß du das weißt. Hast mir ja auch du beigebracht. 🙄



  • implizit-flamer schrieb:

    ...
       char *za[10]; /* Zweidimensionales char - Array */
    ...
    }
    

    nö, eindimensionales pointer-array. aber das hatten wir ja schon.
    🙂



  • Tim schrieb:

    DataByte schrieb:

    die Zeichenkette gibt im prinzip nen "const char*" zurück

    Emmm, hä?

    Er meinte wohl Stringliterale sind konstant, sind aber aus historischen Gründen nicht const-qualifiziert?


Anmelden zum Antworten