ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
961
961
EMPFEHLEN
-
24.11.05 00:21 #1
- Registriert seit
- Jan 2005
- Beiträge
- 60
Krieg noch ne Macke mit dem Scheiss C++ !
Damals noch in PHP alles no Problem, da hats Spass gemacht mit Array
zu arbeiten.
In C++ bekomm ich das einfach nicht richtig auf die Reihe und verliere echt die Lust.
Also was ich nicht auf die Reihe bekomme ist die Anzahl der Elemente dieses Arrays
zu erhalten:
Code :1 2 3 4 5 6 7 8 9 10 11
int c = 300; int *t; t = new int[c]; for(int i=0; i<c;i++) t[i]=i; int u = sizeof(t)/sizeof(int); Application->MessageBox(IntToStr(u).c_str(), "Elemente", MB_OK);
Die Messagebox spuckt einen Wert von 1 aus, ist natürlich falsch !
Wo ist das Problem ?
-
24.11.05 02:23 #2
- Registriert seit
- Aug 2001
- Beiträge
- 1.411
Ohne auf deinen Quellcode zu schauen, weiss ich sofort, dass das Problem nicht an der Sprache C++ und schon gar nicht am Compiler liegt!
Zitat von Kleiner Wicht

Junge Junge Junge, sowas kann ich leiden...
Vor allem ist das kein C++ sondern C!
Mit C++ benutzt man die STL mit vector, map etc. da gibt es dann auch richtige count-Funktionen für die Anzahl von Elementen.

Info zu sizeof:
http://msdn.microsoft.com/library/de...f_operator.asp
-
24.11.05 23:50 #3
- Registriert seit
- Jan 2005
- Beiträge
- 60
So So, ABER:
Anscheinend bist Du nicht in der Lage folgendes zu Begreifen:
1. Array - statisch
2. Array - dynamisch
1. Statisches Array
-----------------------------
Code :1 2 3 4 5 6 7
int a_static[]={1,2,3,4,5}; int anzahl=sizeof(a_static)/sizeof(int); cout<<anzahl<<endl; //die Anzahl der Elemente wird hier korrekt ausgegeben !
2.Dynamisches Array
-------------------------------
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int e = 5; int *inhalt; inhalt = new int[e]; for(int a=0; a<e ; a++) { inhalt[a] = a; } int anzahl=sizeof(inhalt)/sizeof(int); cout<<anzahl<<endl; delete(inhalt); inhalt = NULL;
So bei dem ersten statischen Array wird die Anzahl der Elemente korrekt ausgegeben.
WESHALB und WIESO bei einem DYNAMISCHEN ARRAY die ANZAHL der ELEMENTE nicht ausgegeben werden kann, ich nicht wissen
@THOMAS KUSE
Ohne überheblich zu werden, weiß ich, das DUUUU es auch nicht weißt,
weshalb bei einem Dynamischen Array die Anzahl der Elemente so nicht
ausgegeben werden kann.
Niemand zwingt dich auf Quellcode anderer zu schauen
Ich hoffe das es wenigstens ein Mensch auf diesem Planeten gibt,
der weiß warum es nicht funktioniert.
Ein Beispiel wie es funktioniert wäre auch sehr schön, fals das überhaupt
möglich ist.
MfG
-
Hallo,
Wo ist das Problem ?Genau da liegt dein Problem.1. Array - statisch
2. Array - dynamisch
Wie soll der Compiler zur Übersetzungszeit die Groeße eines dynamischen
Arrays zur Kompilezeit ermitteln koennen (denn genau das macht der sizeof
operator). Wenn man mal nachdenkt ist das logisch gell?
Also du bekommst da die Größe des Pointers zurück. Du kannst den
sizeof Opertaotr nur auf Datenstrutkruen richtig anwenden wenn sie
statisch angelegt werden bzw wenn sie aufm Stack liegen. Diese Größen
koennen nämlich zur Kompilierzeit ermittelt werden (übrigens zählt
da auch die Groeße deines integer Zeigers dazu denn der wird auch auf
statisch(zur Übersetzungszeit) angelegt, das auf was er zeigt wird aber
dynamisch allokiert). Du hast mehrere Möglichkeiten:
1.) Du legst das Array aufm Stack an.
2.) Du deklarierst dir eine konstante Variable size die die Arraygröße angibt
3.) Du benutzt wie Thomas Kuse schon sagte die Container aus der stl.
@Thomas
Das hat der Threadersteller beides auch nie behauptet. Er ist bzw warOhne auf deinen Quellcode zu schauen, weiss ich sofort, dass das Problem nicht an der Sprache C++ und schon gar nicht am Compiler liegt!
lediglich etwas frustriert da er den background von sizeof nicht kannte...
Wieso soll das kein C++ sein? In Java z.B. gibt es auch MöglichkeitenVor allem ist das kein C++ sondern C!
dynamische Arrays anzulegen und diese zu
verwenden, deswegen proprammiert man aber immer noch in Java.
Und ich glaube kaum das
oderCode :1
for(int i=0; i<c;i++)
in C geht.Code :1
Application->MessageBox(IntToStr(u).c_str(), "Elemente", MB_OK);
Immer easy bleibenunge Junge Junge, sowas kann ich leiden...
Man kann sie benutzen aber wieso sollte man wenn es angebracht istMit C++ benutzt man die STL mit vector, map etc. da gibt es dann auch richtige count-Funktionen für die Anzahl von Elementen.
nicht auch Arrays benutzen koennen? Die Zugriffszeiten sind viel schneller
(konstanter Aufwand) als die eines Vektors bzw einer Liste.
Natürlich ist eine Liste bzw ein Vektor sicherer und auch leichter
zu verwalten, aber wenn keine Notwendigkeit besteht eine
dynamisch anwachsende Datenstruktur zu verwenden, kann man
meiner Ansicht nach auch Arrays verwenden ohne sich von der
Programmiersprache abzuwenden
Aber prinzipiell gilt nat. wenn man eine Liste braucht und in C++ entwickelt
sollte man auf die stl zurückgreifen und bei der verwendung von strings
in C++ natürlich prinzipiell.
Gruß
RedWingGeändert von RedWing (25.11.05 um 01:05 Uhr)
"I'm not deaf, I'm ignoring you"
----
-
25.11.05 02:54 #5
- Registriert seit
- Jan 2005
- Beiträge
- 60
Okay, wusste nicht das sizeof beim Kompilieren ermittelt,
wie groß das Array mal später sein wird.
Selbst ein angeblich Dynamisches Array ist in gwisser Hinsicht statisch.
Ist ebend doch nich alles so Dynamisch wie ich immer dachte.
Aus den 3 Möglichkeiten, gefällt mir Möglichkeit 2, diese verwende ich schon ne
ganze Weile, dachte aber ich kann mir das spaaren, und ermittle mit sizeof die
größe des reservierten Speichers (Array), aber puuste Kuchen, nich.
Und auf den ganzen nicht Programmierer-Kram beim angeblichen Programmieren,
fahre ich sowieso nicht ab.
Okay Danke für die ausführliche Anleitung, damit kann ich ein Anfänger leben.
NICHT in C -> Application->MessageBox(IntToStr(u).c_str(), "Elemente", MB_OK);
bis die Tage
-
Hallo,
vielleicht noch zur Info:
Man muss die Begriffe statisch und dynamisch etwas differenzierter
betrachten:
In Bezug auf Datenstrukturen bedeutet
statisch:
die Größe einer Datenstruktur ist statisch, d.h. sie kann nicht wachsen
oder schrumpfen
dynamisch:
die Größe einer Datenstruktur kann dynamisch
anwachsen bzw schrumpfen (darunter fällt ein vector oder eine list)
In Bezug auf Festlegungen bedeutet
statisch: alles was vor der Laufzeit festgelegt und allokalisiert werden
kann (darunter fällt dein Zeiger auf das Array)
dynamisch:
alles was während der Laufzeit ermittellt
werden und allokalisiert werden kann (darunter fällt dein Array selber)
Gruß
RedWing"I'm not deaf, I'm ignoring you"
----
-
Was ist ein vector für ein Typ?
-
24.01.06 19:08 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Ein Vector allgemein ist ein dynamisches Array. Speziell in C++ ist mit vector normalerweise ein std::vector aus der C++ Standard Template Library gemeint. Ein std::vector ist eine Template Klasse, also im Grunde ein "unfertiger" Typ der erst noch zur Kompilierzeit komplettiert wird.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo,
der Begriff Vektor bezeichnet allgemein ein Array. Egal ob dynamisch oder statisch...
Die Terminologie kommt daher, das ein Array der Größe n in C++/C einem Vektor aus dem R^n
aus der Mathematik entspricht...
Der stl vector ist in erster Linie ein dynamisch wachsendes Array. Um diesen vector
auf verschiedene Datentypen anzuwenden, verwendet man wie deepthroat schon
erwähnte den Templatemechanismus...
//edit: Hier findest du die API Doku zum stl vector:
http://www.sgi.com/tech/stl/table_of_contents.html
Gruß
RedWingGeändert von RedWing (24.01.06 um 19:33 Uhr)
"I'm not deaf, I'm ignoring you"
----
Ähnliche Themen
-
Wie lösche ich array-elemente?
Von delphinhawe im Forum Flash PlattformAntworten: 1Letzter Beitrag: 08.08.10, 09:52 -
Array Elemente zählen
Von EddieG im Forum C/C++Antworten: 8Letzter Beitrag: 25.03.10, 19:28 -
array elemente mit for ausgeben
Von Denniz im Forum Flash PlattformAntworten: 3Letzter Beitrag: 28.03.07, 23:01 -
MYSQL Elemente in Array
Von DelphiDell im Forum PHPAntworten: 2Letzter Beitrag: 24.12.05, 17:50 -
array-elemente vernichten
Von deepgreen im Forum PHPAntworten: 2Letzter Beitrag: 29.12.01, 20:12





Zitieren
Login






