Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

11.07.2006, 17:49

das geht doch...


der unterschied, den du meinst, macht sich hier bemerkbar:

for(short i=0;i++<10;) m_entities

for(short i=0;++i<10;) m_entities[i]

oben gibts n fehler da du da wirklich auf das 10te element schreibst

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

12

11.07.2006, 17:51

natürlich

Du allocciierst 10 Elemente. In C zählt man von 0 an, also 0, 1, 2, 3, ... 9 => 10 elemente. Damit hast du eine Bereichsüberschreitung wenn du auf arr[10] zugreifst (11. Element). Im übrigen wird hier bei ++i das erste Element (0) nicht auf NULL gesetzt. Hast wohl in AuD nicht aufgepasst 8)


btw. kann es einen Unterschied machen (Schnelligkeit) ob du i++ oder ++i hast, den bei ++i kann das i gleich inkrementiert werden im Register. Bei i++ muss es erst neu geladen und dann inkrementiert werden, aber ich denke die Compiler bekommen das auch so hin ;)

13

11.07.2006, 17:56

nein, ich glaube (ich teste es abend nochmal), die reihenfolge ist so:

for(a;b;c) d;

=>

a
if(b) d else abbruch
c
if(b) d else abbruch
c
...

und da siehst du dass ++i und i++ als anweisung c keinen unterschied machen KANN

ps: au, AUD, würg...

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

14

11.07.2006, 17:58

Teste es ruhig, ich hoffe du weisst aber das bei ++i erst inkrementiert wird, anders als bei i++, wo erst nach einmaligen Schleifendurchlauf das i inkrementiert wird, aber teste ruhig ^^.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

11.07.2006, 17:59

@koschka:

Die beiden Schleifen

C-/C++-Quelltext

1
2
3
for(int i = 0; i < 10; i++) { ... }

for(int i = 0; i < 10; ++i) { ... }


haben dasselbe Verhalten.
Beide werden 10x durchlaufen mit Werten für i von 0 bis 9.

Die letzte Anweisung im for-Header wird nur ausgeführt, aber nicht ausgewertet. Von daher ist es wurscht, ob du dort i++ oder ++i nimmst (jedenfalls bei den eingebauten Typen wie int).

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

16

11.07.2006, 17:59

Zitat von »"koschka"«

@vorposter (name zu umständlich ^^)


Kannst doch auch zitieren. :)

Zitat


Hier schon, weil er eben auch ein i=10 hat, aber nur Elemente von 0...9


Okay, dann mal zum mitschreiben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
// Einmal so...

for (int i = 0; i < 10; ++i)
  std::cout << i << ' ';

std::cout << std::endl;

// und noch einmal anders...

for (int j = 0; j < 10; j++)
  std::cout << j << ' ';

std::cout << std::endl;


Was geben diese beiden Schleifen wohl aus? Welches ist die letzte Zahl in jeder Zeile? (Wenn ich schon so scheinheilig frage, muss das eine Fangfrage sein ;) )

Der Grund liegt darin begraben, in welcher Reihenfolge die drei Ausdrücke in der for-Schleife bearbeitet werden. Wer's weiss, der bekommt einen Keks. (bzw. hat vom Forum schon einem bekommen 8) )

Zitat

Wieso dynamisch definieren? Alles was zur Laufzeit des Programmes erstellt wird, ist dynamisch. Alles andere statisch.


Hmm, bei Objekten verkneife ich mir immer, von dynamisch zu reden, weil in der OOP überwiegend alle Objekte dynamisch erzeugt werden. Ob nun als statische Variablen, kurzeitig auf dem Stack oder in einem std::list/vector/set/map/hastenichgesehn verpackt. Der Unterschied liegt gewöhnlich nur darin, auf welche Weise diese Objekte erzeugt wurden, und selbst das ist bis auf technische Unterschiede recht eintönig.

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

17

11.07.2006, 18:02

*grml* ich muss mal schneller tippen lernen :)
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

11.07.2006, 18:10

Shit, ihr habt Recht ^^. :oops:
Bis jetzt dachte ich immer es sei so richtig, aber sehe auch gerade, das das falsch ist -.- . Ich weiss gar nicht woher ich das hab... naja auch egal, sry für die Verunsicherung!

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

19

11.07.2006, 18:18

liegt sicher an der Hitze :?
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

20

12.07.2006, 13:07

So, jetzt hak ich doch noch mal nach - weil mir immer wieder gesagt wird ich koennte das ohne Doppelzeiger loesen:

1. Die Klasse Base ist abstrakt
2. Es gibt mehrere Klassen die von Base erben, und auf die moechte ich in einem Array zugreifen koennen.
3. Ich weiss nicht wie viele Elemente es sein werden

Die einzige Moeglichkeit die ich da sehe ist ein dynamisches Array von (Base*) zu erstellen, daher Base** array = new (Base*)[anzahl];
"Have you tried turning it off and on again?"

Werbeanzeige