Forum: Mikrocontroller und Digitale Elektronik Leeres Byte Array übergeben


von Thomas (Gast)


Lesenswert?

Hallo,

ich habe folgende Funktion/Problem:

void SendDyn(uint8_t ID, uint8_t Data[])

Wie kann ich diese mit einem leeren Array "Data" aufrufen?

SendDyn(1,0) sorgt bei mir dafür dass der Debugger ein ominöses Array 
192 anzeigt. Ein sizeof(Data) ergibt eine 2?

Wieso ist das alles so?

Vielen Dank schonmal
Thomas

von Werner M. (Gast)


Lesenswert?

Thomas schrieb:
> Wieso ist das alles so?

Weil das übergeben Array ein Pointer ist?

von 911 (Gast)


Lesenswert?

Thomas schrieb:
> void SendDyn(uint8_t ID, uint8_t Data[])
1
char feld[99] = "hello world!";
2
3
SendDyn(911, feld);

von 911 (Gast)


Lesenswert?

Thomas schrieb:
> void SendDyn(uint8_t ID, uint8_t Data[])
1
uint8_t feld[99] = "hello world!";
2
3
SendDyn(11, feld);

von Dr. Best (Gast)


Lesenswert?

Ein Array in C ist ein einfacher Pointer, sprich "Adresse". Mit 
"sizeof(Data)" hast du nun herausgefunden, dass diese Adresse - bzw. der 
Pointer - 2 Byte groß ist. Klasse. Vielleicht solltest du in der 
Funktion noch auf null prüfen, statt einfach so zu dereferenzieren.

von R. W. (quakeman)


Lesenswert?

Also du willst ein Array der Funktion übergeben?

Dann würde ich es so schreiben:
1
void SendDyn(uint8_t ID, uint8_t* Data) {
2
  ...
3
}
4
5
void main() {
6
  uint8_t array[10];
7
8
  ...
9
  SendDyn(1, array);
10
  ...
11
}

Damit übergibst du ein leeres Array mit 10 Elementen deiner Funktion. 
Innerhalb der Funktion kannst du dann mit Pointer Syntax auf die Array 
Elemente zugreifen.
Ob das Array vorher befüllt wurde oder nicht ist dabei egal. Damit 
kannst du also Werte im Array der Funktion übergeben oder Rückgabewerte 
innerhalb der Funktion in das Array schreiben um es dann außerhalb der 
Funktion auszuwerten.

Ciao,
     Rainer

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Fox Mulder schrieb:
> Also du willst ein Array der Funktion übergeben?

Vermutlich wird der Threadstarter nur von der Array-Syntax im 
Funktionsprototypen verwirrt.
1
void SendDyn(uint8_t ID, uint8_t Data[]);
Die ist exakt gleichbedeutend mit
1
void SendDyn(uint8_t ID, uint8_t* Data);

von R. W. (quakeman)


Lesenswert?

Rufus Τ. Firefly schrieb:
>
1
> void SendDyn(uint8_t ID, uint8_t Data[]);
2
>
> Die ist exakt gleichbedeutend mit
>
1
> void SendDyn(uint8_t ID, uint8_t* Data);
2
>

Ich habe es damals noch mit Pointer Syntax gelernt. Aber wenn das 
identisch ist, dann erleichtert das die Lesbarkeit des Codes natürlich 
deutlich.
Da habe ich gleich auch mal wieder etwas dazu gelernt. :)

von Stefan R. (srand)


Lesenswert?

Dr. Best schrieb:
> Ein Array in C ist ein einfacher Pointer, sprich "Adresse".

Das ist falsch, und es wäre nett, wenn die Leute das endlich mal lernen 
würden. :-/

von Dr. Best (Gast)


Lesenswert?

Stefan Rand schrieb:
> Dr. Best schrieb:
>> Ein Array in C ist ein einfacher Pointer, sprich "Adresse".
>
> Das ist falsch, und es wäre nett, wenn die Leute das endlich mal lernen
> würden. :-/

Was denn? Weil der Compiler da noch 'nen Typ ranklebt? Kannste auch 
casten wie du lustig bist und am Ende bleibt als Substanz nur der 
"Wert", die Adresse. Auch zur Laufzeit.

von haspel (Gast)


Lesenswert?

@Dr Beast

int *pointer;
int array[123];

sizeof (pointer) - sizeof (array) = ???

Nach deiner Meinung kommt da 0 raus. Die meisten werden eine andere 
Meinung haben. :-P

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.