Forum: PC-Programmierung Arrays und Zeiger


von Ma B. (drumstick)


Lesenswert?

Guten Tag!

Ich übe c mit dev-C++4.9.9.2

folgendes Beispiel zu Arrays mit Zeiger habe ich nicht begriffen:
1
#include <stdio.h>
2
#include <stdlib.h>
3
4
int main(int argc, char *argv[])
5
{
6
int punkte[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
7
8
// Positionszeiger, Setzen auf 6.Element
9
int *pos = punkte + 5;
10
11
// Index berechnen
12
int index = pos - punkte;
13
14
15
printf("Index: %d\n", index);
16
printf("Wert pos / punkte[index]: %d\n", punkte[index]);
17
18
19
  
20
  system("PAUSE");  
21
  return 0;
22
}



Wieso gibt diese Indexberechnung 5?? pos ist zeigt auf das 6. Element 6. 
Da müsste ja der Wert von punkte 1 betragen? Das seh ich etwas noch 
nicht!
1
// Index berechnen
2
int index = pos - punkte;
3
[


Vielen Dank und freundliche Grüsse!

M.B.

von (prx) A. K. (prx)


Lesenswert?

M. B. schrieb:

> Wieso gibt diese Indexberechnung 5?? pos ist zeigt auf das 6. Element 6.

Der Abstand von deinem 5. Finger zu deinem ersten Finger ist 4, nicht 5.

Wenn das 6. Element den Index 5 hat, weil das erste Element den Index 0 
hat, dann ist der Abstand vom 6. Element zum 1. Element identisch mit 
den Index des 6. Elements, also 5. Das gehört zum Charme von 
Array-Indizes, die mit 0 statt 1 anfangen.

von Ma B. (drumstick)


Lesenswert?

Also 6. Element - 1. Element = 5. Element?!

Zeigt also punkte immer auf das 1. Element, falls nach der Init nichts 
geändert wurde!?

von (prx) A. K. (prx)


Lesenswert?

M. B. schrieb:

> Also 6. Element - 1. Element = 5. Element?!

Nein. 6. Element - 1. Element = Abstand 5.

> Zeigt also punkte immer auf das 1. Element,

Ja. Wenn eine Array-Variable ohne [] verwendet wird, dann ist das 
identisch mit einem Zeiger auf das erste Element.

von Ma B. (drumstick)


Lesenswert?

Vielen Dank! Jetzt ists klar!

Grüsse! M.B.

von DirkB (Gast)


Lesenswert?

M. B. schrieb:
> Zeigt also punkte immer auf das 1. Element, falls nach der Init nichts
> geändert wurde!?

Ja. Daran kannst aber auch nichts ändern. Das ist schon mal ein 
Unterschied zwischen Arrays und Pointern

von (prx) A. K. (prx)


Lesenswert?

DirkB schrieb:

> Ja. Daran kannst aber auch nichts ändern. Das ist schon mal *ein*
> Unterschied zwischen Arrays und Pointern

Nö. Wenn der Pointer const ist kannst du es auch nicht.

Es gibt aber schon Unterschiede. Bei sizeof bespielsweise.

von Rolf Magnus (Gast)


Lesenswert?

M. B. schrieb:

> // Positionszeiger, Setzen auf 6.Element
> int *pos = punkte + 5;
>
> // Index berechnen
> int index = pos - punkte;
>
>
> printf("Index: %d\n", index);
> printf("Wert pos / punkte[index]: %d\n", punkte[index]);

> Wieso gibt diese Indexberechnung 5?? pos ist zeigt auf das 6. Element 6.

Die Kurzform der zwei Pointer-Berechnungen wäre:
1
int index = punkte + 5 - punkte;

Da würdest du wirklich 6 erwarten?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.