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

1

25.08.2003, 21:28

arrays im buch

hi leute,
ich hab mal ne frage:
und zwar ist mir im buch aufgefallen, dass immer ein array zu viel deklariert wird. zb auf seite 55:
da steht

Quellcode

1
2
float afData[3] = {10.0f, -53,285f, 9821.005f};
a = tbVector(afData);


wird da nicht ein argument zu viel übergeben? die arrays fangen ja immer bei "0" an zu zählen? oder macht das nix aus?

greetz MaxEd

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

2

25.08.2003, 23:45

das ist schon OK

wenn Du ein Array der Größe 3 erstellst [3], dann ist genau Platz für 3 Variablen des aktuellen Types.
Also float afData[3]. Der Index für die erste Variable beginnt natürlich bei 0 und der letzte Index ist in diesem Fall die 2. Das heißt aber nicht, das hier zu viel übergeben wurde oder zu wenig Platz ist.
Zwischen (einschließlich) 0 und 2 sind genau Platz für 3. ;-)

3

26.08.2003, 12:47

achso, ich bekomme platz für drei variablen, aber fange bei "0" an zu zählen! scho kapiert 8)

Slendroth

Frischling

Beiträge: 66

Wohnort: Heidelberg

Beruf: Schüler

  • Private Nachricht senden

4

26.08.2003, 14:14

dann is doch in dem array von 0 - 3 Platz für insgesamt 4 variablen...
also würde doch float afData[2] asureichen.
Einer Gesellschaft, die man damit unterhalten kann, dass zwei Menschen einen
Ball hin- und herschlagen, ist alles zuzutrauen

-- Nicht denken! Wissen! --

Visit klamm.de

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

5

26.08.2003, 14:19

a ne neee

ich glaub, ich bin zu dusselig, was zu erklären ;-)
Das erste Element sprichst Du mit 0 an, das letzte in DIESEM Fall mit 2, also gibt es 3 Elemente, weil er [3] geschrieben hat.
Nochmal auf deutsch: Die Größendeklaration aVar[3] bedeutet, dass drei Variablen hintereinander angelegt werden. Das steht fest!
Das erste wird mit [0], das zweite mit [1] und das dritte mit [2] angesprochen.

In anderen Hochsprachen, z. B. VB ist der Index 1-basierend (es gibt auch dort Ausnahmen). Dort sprichst Du die Elemnte mit (1), (2) und (3) an.
Ist aber sehr gewöhnungsbedürftig.

So besser?
Bis später...

6

26.08.2003, 14:46

Man kann es auch noch etwas anders Beschreiben. Hast du ein Array Element schon mal mit der Zeigerschreibweise selektiert? Dann erklärt sich das ganze wie von selbst.

Quellcode

1
2
float fArray[3] = { 1.0f, 2.0f, 3.0f };
float* p = fArray; // Ist das selbe wie float* p = &fArray[0];

Das erste Element ist auch die Startadresse für das Array. Greifen wir jetzt mal auf das dritte Element zu:

Quellcode

1
2
3
4
5
6
7
8
float f = *(p + 3); // Das ist ein Fehler!
// Weil, man nun die Startadresse plus 3 Einheiten (Typ abhängig) zu der Startadresse aufaddiert. Dann landen wir aber im vierten Element

// So ist es richtig
float f = *(p + 2); // equel to: float f = fArray[2];

// Nun greifen wir auf das erste Element zu
float f = *(p + 0); // equel to: float f = fArray[0]; or: float f = *p;

Denn Index den man angibt wird immer zur Startadresse aufaddiert und Startadresse + 0 == First element.

Tipp: Mal dir mal ein Speicherdiagramm auf. Dann sieht man es gleich.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

7

26.08.2003, 15:00

genau!

ich habe gehört, dass das Hochzählen eines Zeigers z. B. in einer Schleife schneller gehen soll, als das ständige Indizieren.
z. B.:

type aVars[10];
type* p = aVars;
// das hier muss man sich wie eine Linie im Speicherbereich vorstellen.
// die Linie beginnt bei aVars[0] und endet bei aVars[9]
// p geht von 0 bis 9 alles durch
while (p < aVars + 10)
{
*(p++) = irgendwasständigneues;
}
Bis später...

8

26.08.2003, 16:46

Hmm....keine Ahnung. Ich wüste aber nicht warum. Aber du kannst es ja mal testen :)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Slendroth

Frischling

Beiträge: 66

Wohnort: Heidelberg

Beruf: Schüler

  • Private Nachricht senden

9

26.08.2003, 18:13

Ok, jetzt habs sogar ich kapiert.. :)
Einer Gesellschaft, die man damit unterhalten kann, dass zwei Menschen einen
Ball hin- und herschlagen, ist alles zuzutrauen

-- Nicht denken! Wissen! --

Visit klamm.de

10

01.09.2003, 16:34

ok, danke für die antworten. aber ich hab noch ne frage:

was ist der unterschied zwischen zb:

int* p;
und
int *p;

Werbeanzeige