tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
3273
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    TimSz TimSz ist offline Mitglied Bronze
    Registriert seit
    Oct 2003
    Beiträge
    49
    Hi

    Mein Programm sieht etwa so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    #include <stdio.h>
    void test(char chr)
    {
        printf("test %c", chr);
        return;
    }
     
    void main ()
    {
        void (*test1)(char);
        void (*test2)(char);
        void (*test3)(char);
        test1 = (&test);
        test2=test;
        test3=*test;
        printf("%d\r\n", test1);
        test1('a');
        return;
    }
    Die Funktion mit dem Pointern funktioniert problemlos.

    In der Zeile printf("%d\r\n", test1); gibt er mir anscheinend auch wie erwartet die Adresse der Funktion auf.
    Nun möchte ich jedoch wissen, welches Byte am Anfang der Funktion steht.
    Bei normalen Pointern könnte ich mir also statt "test1" also "*test1" ausgeben; ich erhalte jedoch stattdessen immer wieder nur die Adresse der Funktion.

    Gruß

    Tim
     

  2. #2
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    Ist nciht der Name der Funktion gleichzeitig ein Pointer auf die Funktion?


    mfg
    umbrasaxum
     

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Naja, also ich meine was versprichst du denn dir davon? Was soll deiner Meinung nach das erste Byte auf das der Funktionspointer zeigt für einen Sinn/Wert haben?

    Man kann keine Funktionspointer dereferenzieren.

    Aber, man kann natürlich wild umher-casten:
    Code :
    1
    
    printf ("%d\n", (int)*(char*)test1);

    In C/C++ muß der Rückgabetyp der Funktion main int sein.
    Zitat Zitat von http://de.wikibooks.org/wiki/C-Programmierung:_FAQ
    Hier nur ein unvollständige Liste der populärsten Irrtümer:

    * Ein Programm beginnt mit void main(void) , main() usw. - Dies entspricht nicht dem (C99) Standard. Dort ist festgelegt, dass jedes Programm (sofern im keine Parameter übergeben werde) mit int main() oder int main(void) beginnen muss. Die Definition mit void main() bzw. void main(void) ist kein gültiges C, da der Standard vorschreibt, dass main einen Rückgabewert vom Typ int besitzen muss (auch wenn viele Compilerdiese void dennoch akzeptieren). Die Definiton mit main() war früher gültig, da beim Fehlen eines Rückgabetyps angenommen wurde, dass die Funktion int zurückliefert.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    TimSz TimSz ist offline Mitglied Bronze
    Registriert seit
    Oct 2003
    Beiträge
    49
    Hi,

    Dein "umher-casten" scheint zu funktionieren; mich hat einfach interessiert, wie das so funktioniert.

    Danke auch für den Tipp mit dem void/int; leider gibt Visual C++ nicht einmal eine Warnung aus.

    Gruß

    Tim
     

  5. #5
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    ... leider gibt Visual C++ nicht einmal eine Warnung aus.
    Auch wenn du nicht ganz unrecht hast, solltest du nicht dem Compiler die Schuld an deinem schlechten Programmierstil geben.


    mfg
    umbrasaxum
     

  6. #6
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,
    Danke auch für den Tipp mit dem void/int; leider gibt Visual C++ nicht einmal eine Warnung aus.
    solltest du nicht dem Compiler die Schuld an deinem schlechten Programmierstil geben.
    ich glaube das war auch nicht des Posters Absicht, er hat es lediglich bedauert
    das ihm der Compiler des VSs nicht drauf hin gewiesen hat...

    P.S. Wenn man das mit dem Rückgabewert nicht oder falsch gelernt bekommt
    deutet das noch lange nicht auf schlechtne Programmierstil hin.
    Gruß

    RedWing
    Geändert von RedWing (31.08.05 um 21:44 Uhr)
     
    "I'm not deaf, I'm ignoring you"
    ----

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von RedWing
    P.S. Wenn man das mit dem Rückgabewert nicht oder falsch gelernt bekommt
    deutet das noch lange nicht auf schlechtne Programmierstil hin.
    <klugscheisser-modus: an>
    es muss natürlich korrekt heißen: "gelehrt" und nicht "gelernt"...
    <klugscheisser-modus: aus>
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Zum Glück musst ich noch nicht an der PISA Studie teilnehmen

    Das mit dem Modus muss ich mir merken
     
    "I'm not deaf, I'm ignoring you"
    ----

Ähnliche Themen

  1. Funktionspointer in C
    Von blackbirdthefirst im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 07.08.06, 18:45
  2. [VC6] Funktionspointer in einem struct
    Von Amon-Rê im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 18.01.05, 11:08
  3. Funktionspointer
    Von Andreas Witt im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 04.01.05, 16:12
  4. Funktionspointer
    Von HansKloss im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 15.12.04, 11:14
  5. Funktionspointer
    Von Schtehffi im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 30.03.04, 07:36