Warum benötige ich hier kein Stern beim Pointer? :-) Bitte um Hilfe

Gast #1860451
Lesenswert?

Guten Tag an alle Pointer-Spezialisten.

Eine kurze Frage: Wann * vorm Pointer, wann nicht?

Beispiel:
1
uint8_t uart_snd_buffer[100];
2

3
test = build_checksum (uart_snd_buffer, 3);
4

5
uint8_t build_checksum (uint8_t *data, uint8_t bytecount)
6
{
7
  uint8_t checksum = 0;
8
  uint8_t counter;
9
  
10
  for (counter = 0; counter < bytecount; counter++)
11
  {
12
    checksum ^= data[counter];
13
  }
14
  
15
  return checksum;
16
}

Ich übergebe ja ein Array, da wird ja direkt die Adresse übergeben, 
nicht der Inhalt. In meiner Funktion "build_checksum" habe ich als 
Übergabewert einen Pointer, da ich ja eine Adresse bekomme.

Aber wieso muss ich jetzt bei
1
checksum ^= data[counter];
nicht
1
checksum ^= *data[counter];
? Ich will doch den Inhalt haben.

Manchmal steh ich da echt noch auf dem Schlauch. Der Compiler meckert 
mit "*" auf jeden Fall und ohne gehts.
Gast #1860463
Lesenswert?

Stell dir eine Zeichenkette vor:

char *text = "Hallo Welt.";

Möchtest du nun einen einzelnen Buchstaben haben, kannst du das 
ebenfalls über die eckigen Klammern erreichen:

char buchstabe = text[2];

Du erhältst dereferenziert einen char.
Das ist äquivalent zu:

char buchstabe = *(text + 2);

Nico

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren