Ein weiterer Newbie



  • Tag zusammen.

    Ich war bis vor einem Jahr ein glücklicher C++ Programierer. Ich konnte den Rechner mittels eines Programs herunterfahren, ja ich konnte sogar einen sehr billigen Asteroids clon basteln.

    Leider hat sich das geändert, ich muss in kürze eine C Klausur schreiben. Leider gibt es offensichtlich doch kleinere Unterschiede zwischen C und C++, und fragen wie "wieviel Speicherplatz belegt folgende Struktur" haben mich früher nicht sonderlich interessiert. Auch bei den Fachwörtern und dem Standartvokabular habe ich vermutlich noch gewisse Lücken.

    Ich hoffe zusammen mit dem Büchern, Google und hoffentlich einigen netten helfern das nötige wissen zu bekommen, die Klausur zu bestehen... und ich fange direkt mal mit einigen vermutlich dummen C fragen an.

    Ansi C ist das normale C?

    "definieren sie einen Zeigervektor und initialisieren sie diesen gleichzeitig"
    initialisieren ist dem Zeiger eine Variable zuordnen, oder? wie sieht die antwort auf die frage aus?

    wieviel speicherplatz in byte belegen text[] und ptr_1?

    char text[] = "hello C-fans";
    char *ptr_1 = "hello C-fans";
    

    Was ist ein Funktions Prototyp, wozu benötigt man ihn und wie muss der folgende Programabschnitt lauten? schreiben sie den Funktionsprototyp an die richtige stelle in diesem program.

    int main(void)
    { int x=1,y=2;
    float z=0.0;
    ...
    z =berechne(x,y);
    ...
    

    danke im vorraus !

    gruß, Gurke



  • ProgramierGurke schrieb:

    char[] = "hello C-fans";
    char *ptr_1 = "hello C-fans";
    

    Das erste (da hast du den Bezeichner vergessen) benötigt 13 Bytes (für jeden Buchstaben eins und dann noch für das terminierende Null. Das zweite ist nur ein Zeiger und benötigt (normalerweise) 4Byte.

    Google: Funktionsprototyp

    Btw heisst es "voraus" mit nur einem "r".



  • thx für die antwort. hast recht... müsste noch das wort "text" nach char kommen...

    ein pointer braucht immer 4 byte?

    die terminierende 0 ist das "ende" des satzes, oder?



  • ProgramierGurke schrieb:

    thx für die antwort. hast recht... müsste noch das wort "text" nach char kommen...

    ein pointer braucht immer 4 byte?

    die terminierende 0 ist das "ende" des satzes, oder?

    Nein nicht jeder Pointer braucht 4Byte, das kommt auf die Adressierung an. Auf einem normalen PC sind das aber ATM noch 32Bit = 4Byte.



  • auf einem normalen pc habe ich also immer nur 4 byte für pointer... ok.



  • die terminierende null ist das ende eines strings, nicht das eines satzes.

    (die geschichte über deine vergangenheit von "selbstgeschriebenen asteroid clones" finde ich unglaubwürdig.)



  • wenn du auf einem normalen PC auf XP 64 bit oder Linux 64 Bit wechselst könnte es sein das die Pointerlänge auf 8 anwächst. Dies ist immer von den Fähigkeiten des Prozessors abhängig. Es hängt davon ab wie groß der Speicherbereich sein soll den man addressieren will bei den 64 Bit Prozessoren sind die Pointer 64 Bit aber physikalisch gibt es nur 48 Adressleitungen an den Prozessoren.



  • Programmierer und Programm schreibt man mit 2m 🙄



  • (die geschichte über deine vergangenheit von "selbstgeschriebenen asteroid clones" finde ich unglaubwürdig.)

    hat funktioniert! sogar die meteoriten konnten kaputt gehen, wenn man drauf geschossen hat.... ok, hättet ihr den quelltext gesehen, hättet ihr euch vermutlich tot gelacht... aber es hat geklappt....

    die terminierende null ist das ende eines strings, nicht das eines satzes.

    dürfte in diesem fall das gleiche sein... ok...

    wenn du auf einem normalen PC auf XP 64 bit oder Linux 64 Bit wechselst könnte es sein das die Pointerlänge auf 8 anwächst.

    ich glaub nicht, dass in den nächsten 10 jahren bei uns 64 bit prozessoren zu finden sein werden... also 4.

    Programmierer und Programm schreibt man mit 2m

    ja... die sache mit der rechtschreibung bemängelt mein compiler auch immer...



  • Was ist ein Funktions Prototyp, wozu benötigt man ihn und wie muss der folgende Programabschnitt lauten? schreiben sie den Funktionsprototyp an die richtige stelle in diesem program.

    C/C++ Code:
    int main(void)
    { int x=1,y=2;
    float z=0.0;
    ...
    z =berechne(x,y);
    ...
    }

    bei einer main ist ein prototyp (glaub ich) eher unnötig in diesemfalle wuerde er wohl so lauten:

    int main();
    int main()
    { int x=1,y=2;
    float z=0.0;
    ...
    z =berechne(x,y);
    ...
    }
    


  • Ich wuerde eher denken, der Prototyp sollte fuer die Funktion "berechne" vorhanden sein, da diese evtl. hinter main definiert wird.

    float berechne(float x, float y); // Edit: Paramter hinzugefuegt
    
    int main()
    { int x=1,y=2;
    float z=0.0;
    ...
    z =berechne(x,y);
    ...
    }
    

    Fuer main macht das imo keinen Sinn.

    Gruss,
    DeSoVoDaMu


Anmelden zum Antworten