Pointer :( und XPM



  • Hallo, Ich habe da mal eine Verständnisfrage.
    Der Code ist Müll, ich weiß. Er compiliert fehlerfrei und läuft nicht korrekt.

    Kann mir bitte jemand erklären, warum er nicht so läuft wie er sollte!
    Was muss geändert werden, damit die beiden Pointer am Ende gleich sind.
    Ich sehe gerade den Wald vor lauter Bäumen nicht...

    #include <stdio.h>
    
    /* XPM */
    const char *pit_xpm[] = {
    "4 4 2 1",
    " 	c None",
    ". 	c #FF0000",
    " .. ",
    "....",
    "....",
    " .. "};
    
    void getImg(const char **xpm) {
      xpm = mov_xpm;
    }
    
    int main(int argc, char **argv) {
      const char **xpm;
      getImg(xpm);
    
      printf("orig: %p\n", pit_xpm);
      printf("func: %p\n", xpm);
    
      return 0;
    }
    
    // EOF
    
    
    

    Das const bei dem XPM ist gegeben, dass kann ich nicht ändern.
    Die Funktion getImg soll einfach nur die richtigen Pointer zurückgeben, aber nicht im Return.
    Normalerweise müsste man doch die Funktion mit '&' aufrufen, dann kommt es aber zu Compilerfehlern...



  • Sorry, in Zeile 14 muss es natürlich pit_xpm statt mov_xpm heißen.



  • @MrFlay sagte in Pointer 😞 und XPM:

    void getImg(const char **xpm) {
    xpm = mov_xpm;
    }

    Dir fehlt da ein Stern.

    void getImg(const char ***xpm) {
      *xpm = mov_xpm;
    }
    
    int main(int argc, char **argv) {
      const char **xpm;
      getImg(&xpm);
    

    Und schon bist du ein 3-Stern Programmierer.



  • pit_xpm ist kein Pointer, sondern ein Array von pointern.

    Würdest du dich wundern, wenn

    void getInt(int a) { a=2;}
    
    int main()
    {
       int x = 0;
       getInt(x);
    }
    

    x nicht verändert?



  • ps: Du bist auch im komplett falschen Forum.
    Ich denke das sollte ins C Forum, evtl. noch C++. Aber sicher nicht C++/CLI.



  • Danke, ja der dritte Stern war das Problem. 👍
    "3-Stern Programmierer" ist jetzt kein Titel auf den man stolz sein kann.
    *Asche auf mein Haupt streu

    Mich wurmt, warum der Compiler dabei nicht meckert...
    Aber im Prinzip ist es ja "richtig", nur das Programm ist Unsinn.



  • Also wenn man in C++ auf mehr als einen Stern kommt, hat man in 99% aller Fälle was schlimmes angerichtet 😁 In C ist das vermutlich daily business 😎



  • @MrFlay sagte in Pointer 😞 und XPM:

    Danke, ja der dritte Stern war das Problem. 👍
    "3-Stern Programmierer" ist jetzt kein Titel auf den man stolz sein kann.

    Naja. In C++ sind 3 Sterne mMn. schon extrem. In C ... nicht ganz so. Spätestens bei 4 solltest du dir aber Sorgen machen.

    Mich wurmt, warum der Compiler dabei nicht meckert...
    Aber im Prinzip ist es ja "richtig", nur das Programm ist Unsinn.

    Rüschtüg 🙂
    Der Compiler könnte dir maximal eine Warnung geben dass die Zuweisung sinnfrei ist. Manche Compiler/Static-Analyzer machen das soweit ich weiss auch - mit den passenden Einstellungen.



  • Was soll überhaupt die Funktion getImg? Man kann doch direkt auf pit_xmp zugreifen.

    Ansonsten einfach

    const char* getImg()
    {
        return pit_xpm;
    }
    

Anmelden zum Antworten