Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Arrays variabler Größe in Type-Strukturen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 07.11.2006, 16:54    Titel: Arrays variabler Größe in Type-Strukturen Antworten mit Zitat

In TYPEs kann man ja für gewöhnlich keine dynamischen Array anlegen. Also liegt ja die Verwendung von Pointern nahe.
Bei einem INTEGER-Feld also:
Code:
type IntData
     Length  as integer
     Ort     as integer ptr
end type

Und dann irgendwie mit
Code:
dim as integer Feld(2)
dim as IntData Daten
Daten.Length = 3
Daten.Ort = @Feld(0)

Aber jetzt? Wie greife ich jetzt, sobald ich den Pointer erstellt habe, mit ihm auf das Feld zu?

Danke im Voraus,
jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 07.11.2006, 17:01    Titel: Antworten mit Zitat

Das geht fast genauso wie bei normalen Arrays:

Code:
type IntData
     Length  as integer
     Ort     as integer ptr
end type

dim as integer Feld(2), i
dim as IntData Daten

Daten.Length = 3
Daten.Ort = @Feld(0)

Daten.Ort[0]=123
Daten.Ort[1]=456
Daten.Ort[2]=789

For i = 0 to 2
   Print Daten.Ort[i]
Next i


Wie du siehst, musst du nur eine eckige Klammern ( '[]' statt '()' ) verwenden zwinkern
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 07.11.2006, 17:07    Titel: Antworten mit Zitat

Na super. Dankeschön lächeln

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 07.11.2006, 17:58    Titel: Antworten mit Zitat

Normalerweise macht man das aber anders.
Du erstellst ein Array, doch meißtens alloziert man einfach den gewünschten speicherbereich:

Code:
type IntData
     Length  as integer
     Ort     as integer ptr
end type

dim as integer i
dim as IntData Daten

Daten.Length = 3
Daten.Ort = callocate(3)    'man kann auch allocate verwenden, dann wird allerdings der Speicherinhalt NICHT auf 0 gesetzt

Daten.Ort[0]=123
Daten.Ort[1]=456
Daten.Ort[2]=789

For i = 0 to 2
   Print Daten.Ort[i]
Next i


So muss man nicht erst ein Array erstellen.
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 07.11.2006, 18:03    Titel: Antworten mit Zitat

Na wer sagt's denn. Da hab ich endlich mal wieder was Nützliches gelernt lächeln

Danke nochmals lächeln

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 10.11.2006, 17:23    Titel: Antworten mit Zitat

Sieh dir am besten auch die entsprechenden Referenz-Einträge der Ref an. Das wäre hauptsächl.
http://www.freebasic.de/r.php?s=ALLOCATE
http://www.freebasic.de/r.php?s=PTR
aber auch die Links, die von dort weiter weisen.

In der CHM-Version kannst du auch das Kapitel "Eckige Klammern" ansehen, ich glaube, da steht auch noch die eine oder andere nützliche Passage.


Have a nice day
Ciao
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz