AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pointer: Zirkumflex Frage

Ein Thema von Blatt · begonnen am 15. Sep 2010 · letzter Beitrag vom 16. Sep 2010
Antwort Antwort
Blatt

Registriert seit: 8. Sep 2010
17 Beiträge
 
#1

AW: Pointer: Zirkumflex Frage

  Alt 15. Sep 2010, 23:27
Also

1.
type
PByte = ^Byte;

2.
var
test: ^Byte;

und 3.?

Nebenbei: weshalb kann das Record eigentlich benutzt werden, bevor es definiert ist?

type
PXxx = ^TXxx;
TXxx = record
end;

PS: Aber die Sprache Pascal scheint ja doch, trotz ihres Alters, hier und da ein paar Mängel zu haben und kommt an manchen Stellen etwas sehr statisch benutzbar herüber..
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Pointer: Zirkumflex Frage

  Alt 15. Sep 2010, 23:40
Delphi-Quellcode:
type
  PXxx = ^TXxx;
Weil der Compiler hier weis, das es ein Pointer werden soll und der erforderliche Speicherplatz bekannt ist. Das der Typ zu dem Zeitpunkt nocht nicht auf Existenx geprüft wird, ist im Prinzip nur ein Feature. Ist allerdings wirklich nicht typisch für Pascal.

Delphi ist ja nicht pures Pascal, sonder Object-Pascal mit Spracherweiterungen (mit Mängeln, wie meine Rechtschreibung um diese Zeit )

Geändert von Satty67 (15. Sep 2010 um 23:47 Uhr) Grund: ich geht jetzt ins Bett
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Pointer: Zirkumflex Frage

  Alt 16. Sep 2010, 06:26
Das mit dem Operator war gut erklärt, stimmt aber nicht 100%.

Ich meine, das die VErwendung in einer Variablendeklaration ein Zugeständnis ist, mehr nicht. Denn eigentlich sollte sowas auch in einer Parameterdeklaration möglich sein. Isses aber nicht.
Aber vielleicht wollte N.Wirth auch sowas vermeiden:

Procedure Foo (Var Bar: Record BarFoo, Foobar :Integer; End; Blub : ^Byte);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Blatt

Registriert seit: 8. Sep 2010
17 Beiträge
 
#4

AW: Pointer: Zirkumflex Frage

  Alt 16. Sep 2010, 09:46
Also ist es wirklich nur sehr beschränkt implementiert und nicht so generisch wie in C?
uff, (beschäftige mich seit 2 Tagen mit Delphi) also manche Dinge stören mich echt erheblich an Object-Pascal und andere, sinnvolle Features vermisse ich sehr, bei denen ich nie gedacht hätte, dass so etwas in einem (halbwegs) aktuellen Delphi-Compiler fehlen würde..
Naja, danke für die Antworten
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Pointer: Zirkumflex Frage

  Alt 16. Sep 2010, 10:23
Hallo,
Ich meine, das die VErwendung in einer Variablendeklaration ein Zugeständnis ist, mehr nicht. Denn eigentlich sollte sowas auch in einer Parameterdeklaration möglich sein. Isses aber nicht.
Liegt es nicht eher daran, dass zwei Typen auch dann als unterschiedlich gelten, wenn sie die gleiche Struktur besitzen, aber unabhängig voneinander definiert wurden?
Delphi-Quellcode:
var
  a: ^Byte;
  b: ^Byte;
begin
  a := b; // Fehler: inkompatible Typen
end;
Kompatible Typen bei der Verwendung von Prozedurparametern erreicht man, wenn für die Typvereinbarung ein Name eingeführt wird, der auf beiden Seiten - beim Aufruf und bei der aufgerufenen Routine - verwendet wird.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Pointer: Zirkumflex Frage

  Alt 16. Sep 2010, 16:52
Was die Typdeklaration angeht, kann ich mich erinnern, daß zuerst alle "Namen" gesammelt werden, und dann erst diesen Namen die entsprechenden Typen zugewiesen werden.
also ungefähr so:
Delphi-Quellcode:
Type
 prec =^rectyp;
 rectyp = record..........end;

 rec =^record..........end;
 rectyp = record..........end;
Wenn man es mit dem zweiten Konstrukt versucht, bekommt man sofort die Meldung "Bezeicher erwartet" um die Ohren gehauen.
Was eigentlich hinreichend genau ist, ein Pointer weist immer auf einen beliebigen Typen hin.
Die sog. Typisierung ist eigentlich nur ein Schmankerl um ein paar Fehler zu vermeiden.

Für ein funktionierendes Programm ist so etwas durchaus ausreichend:
Delphi-Quellcode:
Type
  TListenelement = record
                     Daten : irgendwas;
                     next : pointer;
                     last : pointer;
                   end;
var
  ErstesElement,
  LetztesElement,
  AktuellesElement : pointer;
aber so ist es etwas einfacher:
Delphi-Quellcode:
Type
  PListenelement = ^TListenelement;
  TListenelement = record
                     Daten : irgendwas;
                     next : PListenelement;
                     last : PListenelement;
                   end;
var
  ErstesElement,
  LetztesElement,
  AktuellesElement : PListenelement;
Edith:
und dereferenzieren kann ich immer noch mit allen möglichen Typen!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 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