wann * bei pointer in funktion

Gast #6442047
Lesenswert?

hallo,
ich habe eine funktion, wo ich arrays und variablen als pointer übergebe
a, b, c sind arrays, size ist normale variable
1
static void function(uint8_t* a, uint8_t* b, uint8_t* c, uint8_t* size)
2
{
3
  c[0] = a[0] + b[0]
4
  *size = 1;
5
}


Warum muss ich bei size ein * machen und bei den arrays nicht? Arrays 
sind zwar implizit pointer, aber wenn ich dennoch ein sternchen 
vorsetze, bekomme ich einen Fehler (invalid type argument).
Aber der dürfte doch eigentlich egal sein oder nicht?
Beitrag #6442060 wurde von einem Moderator gelöscht.
Gast #6442063
Lesenswert?

N. M. schrieb:

> Hm was passiert da wohl wenn a eine Struktur ist die z.B. 100 Byte groß
> ist und ich auf Index b=2 zugreifen möchte?

In beiden Fällen dasselbe. Wenn man einen Pointer um N erhöht, zeigt er 
i.a. nicht etwa N Bytes im Speicher weiter, sondern N-mal seinen 
Datentyp. Das ist demzufolge nur dann identisch, wenn es sich um einen 
Pointer auf einen einbytigen Datentyp wie char handelt.
#6442074
Lesenswert?

Atomkraft für den Iran schrieb im Beitrag #6442060:
> wenn a ein Pointer auf ne struct ist dann springt er eine struct weiter
> wenn du a um 1 inkrementierst. Wenn du wirklich nur 1 byte weiter laufen
> willst, must du erst a umcasten zu einem z.B. uchar

Du hast natürlich Recht. Denkfehler von mir.
#6442218
Lesenswert?

ich glaube so wird er es nicht verstehen...
1
 
2
static void function(uint8_t* a, uint8_t* b, uint8_t* c, uint8_t* size )
3
{
4

5
// size enthält die Adresse von der Variable die du der Funktion übergibst.  
6
  c[0] = a[0] + b[0]
7

8
  *size = 1; // hier weist du der variable die auf size zeigt den wert 1 zu
9
// aber size =1; weist du den pointer size die Adresse 1 zu ! 
10
}

Pointer wichtiges Thema...
#6442324
Lesenswert?

Mike schrieb:
> Warum muss ich bei size ein * machen und bei den arrays nicht?

Wenn du auf das zugreifen willst, worauf er zeigt, musst du den Zeiger 
dereferenzieren. Sowohl * als auch [] dereferenzieren den Zeiger.

> Arrays sind zwar implizit pointer, aber wenn ich dennoch ein sternchen
> vorsetze, bekomme ich einen Fehler (invalid type argument).
> Aber der dürfte doch eigentlich egal sein oder nicht?

Nein, denn damit versuchst du, zweimal zu dereferenzieren, einmal mit 
dem * und noch einmal mit dem [].

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