String



  • blurry333 schrieb:

    meinst du mit mehreren Strings etwa sowas ?

    char* array[5][];
    

    ein Zeiger kann doch immer nur auf eine einzige Adresse zeigen ?

    char** ist ein Zeiger auf einen Zeiger. charr** zeigt auf den Anfang eines Arrays aus Zeigern. Und jeder Zeiger in diesem Array zeigt auf einen String.



  • mein Compiler schluckt das problemlos.

    void funk(char* x){}
    
    //main
    char* array[5][10];
    funk(array);
    


  • blurry333 schrieb:

    mein Compiler schluckt das problemlos.

    void funk(char* x){}
    
    //main
    char* array[5][10];
    funk(array);
    

    Kompilierst Du das als C-Code?



  • ja als C code mit Eclipse



  • blurry333 schrieb:

    ja als C code mit Eclipse

    Und warum fragst Du im C++-Forum? Nach knapp 450 Posts sollte man wissen, welches Forum man benutzt...



  • blurry333 schrieb:

    meinst du mit mehreren Strings etwa sowas ?

    char* array[5][];
    

    Das ist kein C++ (auch kein C).

    blurry333 schrieb:

    ein Zeiger kann doch immer nur auf eine einzige Adresse zeigen ?

    Eine Zeigervariable speichert höchstens eine Adresse, ja.

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
      for (int i=0; i<argc; ++i) {
        if (i>0) std::cout << ' ';
        std::cout << argv[i];
      }
      std::cout << std::endl;
    }
    

    Speicherlayout (Beispiel mit sizeof(char*)==4):

    Name:      argc        argv          argv[0] argv[1] argv[2]
    Adresse:   egal        egal            152     156     160
             +-------+   +-------+      +-------+-------+-------+
    Inhalt:  |   3   |   |  152  |      |  400  |  412  |  405  |
             +-------+   +-------+      +-------+-------+-------+
    
    Adresse:  400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415
             +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    Inhalt:  | w | h | a | t |\0 | f | * | c | k | ? | ! |\0 | t | h | e |\0 |
             +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    

    Ausgabe:

    what the f*ck?!
    

    Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.



  • [quote="krümelkacker"]

    blurry333 schrieb:

    Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.

    Da bekomm ich aber was anderes raus :

    printf("Adresse in argv: %x\n",argv);
    
    	printf("Adresse von argv[0]: %x",&argv[0]);
    

    Ausgabe:

    Adresse in argv: 3e3c48
    Adresse von argv[0]: 3e3c48



  • [quote="blurry333"]

    krümelkacker schrieb:

    blurry333 schrieb:

    Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.

    Da bekomm ich aber was anderes raus :

    printf("Adresse in argv: %x\n",argv);
    
    	printf("Adresse von argv[0]: %x",&argv[0]);
    

    Ausgabe:

    Adresse in argv: 3e3c48
    Adresse von argv[0]: 3e3c48

    Ersteres gibt nicht die adresse von argv aus, sondern die vom inhalt von argv. Das zweite ebenfalls. &argv ist die adresse von argv, weder argv noch &argv[0]



  • printf("Adresse in argv: %x -> %x\n",*argv, argv);
    printf("Adresse von argv[0]: %x\n",&argv[0]);
    printf("Adresse von argv[1]: %x",&argv[1]);
    
    Adresse in argv: 3e2441 -> 3e24c8
    Adresse von argv[0]: 3e24c8
    Adresse von argv[1]: 3e24cc
    

    greetz KN4CK3R



  • blurry333 schrieb:

    krümelkacker schrieb:

    Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.

    Da bekomm ich aber was anderes raus :

    printf("Adresse in argv: %x\n",argv);
      printf("Adresse von argv[0]: %x",&argv[0]);
    

    Ausgabe:

    Adresse in argv: 3e3c48
    Adresse von argv[0]: 3e3c48

    Das klingt so, als würdest Du glauben, hier einen Widerspruch aufgezeigt zu haben. Dem ist nicht so. zeiger==&zeiger[0] ist immer wahr (Tautologie), unabhängig davon, wohin der Zeiger zeigt. Der Standard definiert zeiger[index] äquivalent zu *(zeiger+index). &zeiger[0] ist daher äquivalent zu &*zeiger, wobei sich & und * quasi wegkürzen.

    Cachus schrieb:

    Ersteres gibt nicht die adresse von argv aus, sondern die vom inhalt von argv.

    Die Adresse von argv ist eigentlich noch weniger interessant.


Anmelden zum Antworten