![]() |
[C] Fragen zu Pointern
Hallo zusammen,
ich bin gerade an einer alten Informatik-Prüfung. Es geht um C und Pointer. Man soll kennzeichnen, welche Anweisungen richtig und welche falsch sind und ggf. markieren, was falsch ist. Die meisten Anweisungen habe ich richtig eingestuft, doch bei diesen 3 verstehe ich nicht, wieso diese richtig bzw. falsch sind:
Code:
Was ich nicht verstehe ist nun folgendes:
void main()
{ char Buchstab, *pointerBuch = &Buchstab; pointerBuch = "Adam Riese"; // (1) -> richtig pointerBuch = "a"; // (2) -> richtig *Buchstab = "xyz"; // (3) -> falsch, als falsch markiert: * } zu (1) und (2): Auf den Inhalt (also den Wert) des Pointers greife ich normalerweise mit dem Dereferenzierungsoperator (ich glaube der nennt sich so) * zu. Lasse ich diesen Weg, würde ich sagen, dass ich die Speicheradresse zuweise. Wieso wird als Adresse "Adam Riese" bzw. "a" überhaupt akzeptiert bzw. die Adresse des ersten String-Zeichens zugewiesen? Wenn wir gerade dabei sind: Ist es generell so, dass die Adressen von einem Zeichen zum nächsten fortlaufend sind? Denn wenn ich die Adresse des Pointers hochzähle, komme ich immer genau zum nächsten Buchstaben. Ich habe immer gedacht, dass eine willkürliche Adresse genommen wird, die eben grad frei ist. zu (3): Ich halte diese Anweisung für völligen Blödsinn, da Buchstab erstens kein Pointer ist und zweitens einem Char nur ein Zeichen zugewiesen werden kann. Wieso wird nur der * als Fehler markiert? Als ich das im VS getestet habe, kam auch die Meldung, wie ich sie erhofft hatte: Zitat:
Ich hoffe, ihr könnt mir weiterhelfen. Grüße |
Re: [C] Fragen zu Pointern
Hallo Matze.
Code:
In C ist ein string, wie man ihn aus Pascal/Delphi kennt kein nativer Datentyp, sondern ein Pointer auf ein Zeichen. Zum String gehören dann alle Zeichen nach dem, auf das gezeigt wird, bis zum Nullzeichen \0.
void main()
{ char Buchstab, *pointerBuch = &Buchstab; pointerBuch = "Adam Riese"; // (1) -> richtig pointerBuch = "a"; // (2) -> richtig *Buchstab = "xyz"; // (3) -> falsch, als falsch markiert: * } Daher ist bei 1 und 2 der Ausdruck auf der rechten Seite ebenfalls ein Pointer und kann deshalb zugewiesen werden. Bei 3 steht aber auf der linken Seite ein Ausdruck des Typs char, an den natürlich kein Pointer zugewiesen werden kann. Wenn man den Stern allerdings weglässt ergibt sich:
Code:
Hier sind wieder beide Seiten vom Typ char* und die Zuweisung funktioniert!
Buchstab = "xyz";
EDIT: Blödsinn... :wall: Buchstab ist eben kein Pointer und auch ohne Stern geht's nicht... Gruß, Waldteufel |
Re: [C] Fragen zu Pointern
Moin Benjamin, danke erstmal.
Zitat:
Zitat:
|
Re: [C] Fragen zu Pointern
Zitat:
Zitat:
Zitat:
[1] Siehe hierzu z.B. folgenden Thread: ![]() mfg Christian |
Re: [C] Fragen zu Pointern
Stimmt, in Delphi geht's auch.
Ich habe das mit der zufälligen Adresse wohl verwechselt mit dem Speicherbereich, den ein Programm zu Beginn zugewiesen bekommt. Dieser ist ja immer ein anderer, je nachdem, wo etwas frei ist. Vermutlich ist der Adressbereich für ein Programm dann schon zusammenhängend, dort wo er das sein sollte. Ich denke Anweisung (3) haut einfach nicht hin (wieso ist klar) und die Lösung ist somit nicht richtig. Dankesehr! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz