Not logged in. · Lost password · Register
Forum: Grundstudium 2. Semester Informatik (GDI II) SPiC RSS
Oktober 2006 MC d)
Maggy #1 -- for a month · 12 posts
Show profile · Link to this post
Subject: Oktober 2006 MC d)
Sorry aber bei dem Ding steh ich grade total auf dem schlauch welche Antwort richtig sein könnte

Was passiert wenn man folgendes Programmstück übersetzen und ausführen möchte:
char *string;
string = "SPiC ist toll";

1.Der Compiler wird beim Übersetzen einen Fehler melden, weil diese Art von Zugriff auf einen Zeiger nicht erlaubt ist
Hm wieso wäre hier der Zugriff nicht erlaubt?

2.Der Variable string wird der Zeiger auf die konstante Zeichenkette "SPiC ist toll" zugeordnet
Ist string eine Variable?? Ich würde sagen string soll doch ein zeiger sein oder?

3.Unter Betriebssystemen wie Unix oder Windows wird zur Laufzeit eine Schutzverletzung bzw SIGSEGV ausgelöst, da dem Zeiger ein Wert zugeordnet wird, der Zeiger jedoch nicht initialisiert wird
Also ich halte es für unwahrscheinlich dass es zu Laufzeiten einen Fehler mit sowas gibt... ich benutze den Zeiger ja fast zu nichts

4.Die Zeichenkette "SPiC ist toll" ist konstant und darf daher keinem nicht-konstanten Zeiger zugewiesen werden.
Das hab ich schonmal ausgeschlosse weil es meiner Meinung nach Wurscht is ob ich was konstantes etwas nicht konstantem zuweise
morty (Administrator) #2 -- since Sep 2003 · 730 posts · Location: Erlangen
Show profile · Link to this post
Quote by Maggy:
Sorry aber bei dem Ding steh ich grade total auf dem schlauch welche Antwort richtig sein könnte

Was passiert wenn man folgendes Programmstück übersetzen und ausführen möchte:
char *string;
string = "SPiC ist toll";

1.Der Compiler wird beim Übersetzen einen Fehler melden, weil diese Art von Zugriff auf einen Zeiger nicht erlaubt ist
Hm wieso wäre hier der Zugriff nicht erlaubt?
"Solch eine Zeichenkette ist \"const\"."

Quote by Maggy:
2.Der Variable string wird der Zeiger auf die konstante Zeichenkette "SPiC ist toll" zugeordnet
Ist string eine Variable?? Ich würde sagen string soll doch ein zeiger sein oder?
Auch ein Zeiger ist eine Variable. Sie enthält nur "zufällig" eine Speicheradresse, welche für dich als Programmierer interessante Daten enthält.


Quote by Maggy:
3.Unter Betriebssystemen wie Unix oder Windows wird zur Laufzeit eine Schutzverletzung bzw SIGSEGV ausgelöst, da dem Zeiger ein Wert zugeordnet wird, der Zeiger jedoch nicht initialisiert wird
Also ich halte es für unwahrscheinlich dass es zu Laufzeiten einen Fehler mit sowas gibt... ich benutze den Zeiger ja fast zu nichts
Ne, dass bezieht sich darauf, dass "Bla" einen Pointer auf das B der Zeichenkette 'B', 'l', 'a', '\0' zurück liefert.
Die Flasche(!) Annahme wäre, dass sowas ginge:
  1. char string[10];
  2. string = "Bla";
und dann in string "Bla" drin stehen würde.


Quote by Maggy:
4.Die Zeichenkette "SPiC ist toll" ist konstant und darf daher keinem nicht-konstanten Zeiger zugewiesen werden.
Das hab ich schonmal ausgeschlosse weil es meiner Meinung nach Wurscht is ob ich was konstantes etwas nicht konstantem zuweise
Ne ist es nicht.
  1. const char * blub;
Dieses blub zeigt auf Daten die nicht verändert werden dürfen.  Wenn ich dann schreibe
  1. *blub = 'C'
wird der Compiler einen Fehler ausgeben, weil ich ja versuche die konstanten Daten zu verändern.
Panos #3 -- for 2 months · 18 posts
Show profile · Link to this post
Die Flasche(!) Annahme wäre, dass sowas ginge:

   1.
      char string[10];
   2.
      string = "Bla";

und dann in string "Bla" drin stehen würde.

würde sowas gehen? : char string[] = "Bla"; Also bei der Definition des Feldes mit einem String initialisieren.


   1.
      const char * blub;

Dieses blub zeigt auf Daten die nicht verändert werden dürfen.  Wenn ich dann schreibe

   1.
      *blub = 'C'

wird der Compiler einen Fehler ausgeben, weil ich ja versuche die konstanten Daten zu verändern.

Wenn ich einen konstanten Zeiger habe, ist dann nur sein Inhalt konstant oder auch die Variable Zeiger?
This post was edited on 2010-07-29, 09:08 by Panos.
morty (Administrator) #4 -- since Sep 2003 · 730 posts · Location: Erlangen
Show profile · Link to this post
Quote by Panos:
würde sowas gehen? : char string[] = "Bla"; Also bei der Definition des Feldes mit einem String initialisieren.

Jep. String wäre dann 4 Byte lang und du könntest ihn nach belieben verändern.

Quote by Panos:
  1. const char * blub;

Wenn ich einen konstanten Zeiger habe, ist dann nur sein Inhalt konstant oder auch die Variable Zeiger?

Bei dem Beispiel ist der Inhalt const ("const char"). Du kanst den Zeiger auf beliebigen konstanten Inhalt zeigen lassen. Du kannst ihn auch auf variablen Inhalt zeigen lassen, aber der lässt sich über den Zeiger nicht mehr verändern.

Du kannst aber auch
  1. char * const blub = 0x1337;
schreiben. Dann ist der Zeiger const, aber der Inhalt variabel. Das const bezieht sich jetzt halt auf das blub. Wichtig ist hier, dass du den Zeiger initialisieren musst, weil du ihn ja nicht mehr verändern kannst.

  1. const char * const blub = 0x1337;
geht auch ;-) )
Maggy #5 -- for a month · 12 posts
Show profile · Link to this post
Wenn ich dann einen zeiger auf was Variables habe kann ich ihm aber auch was konstantes zuweisen oder? (ich glaube ich habe mich oben etwas blöd ausgedrückt)

Ich würd jetz mal aus den ganzen erklärugen schließen dass die zweite Antwort richtig ist^^ danke für die Erklärungen
morty (Administrator) #6 -- since Sep 2003 · 730 posts · Location: Erlangen
Show profile · Link to this post
Quote by Maggy:
Wenn ich dann einen zeiger auf was Variables habe kann ich ihm aber auch was konstantes zuweisen oder? (ich glaube ich habe mich oben etwas blöd ausgedrückt)

Ja, weil ich das Konstante ja nur lese und das variable überschreibe.

Quote by Maggy:
Ich würd jetz mal aus den ganzen erklärugen schließen dass die zweite Antwort richtig ist^^ danke für die Erklärungen

Nein. Die vierte ist richtig. Die zweite ist zwar theoretisch richtig, aber der Compiler wird sich weigern das zu tun. Immerhin suggerierst du damit, dass du auf gegebenenfalls schreibgeschützten Speicher schreiben kannst. Andersherum ist das ja unkritisch.
Maggy #7 -- for a month · 12 posts
Show profile · Link to this post
hm okay auf das 4. hätt ich ma so gar nicht getippt... ich hoffe so eine doofe frage kommt nicht dran @_@
Panos #8 -- for 2 months · 18 posts
Show profile · Link to this post
Wär ich auch nicht draufgekommen... Liegt wahrscheinlich daran, dass wir mit dem Zeug nicht geübt haben... wir hatten ja keine Programmieraufgaben mit sowas.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please note the verification code from the picture into the text field next to it.
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Unclassified NewsBoard 1.6.4 © 2003-5 by Yves Goergen
Page created in 628.4 ms (418 ms) · 91 database queries in 78.1 ms
Current time: 2010-09-08, 11:22:42 (UTC +02:00)