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
Thomas schrieb: > void SendDyn(uint8_t ID, uint8_t Data[])
1 | char feld[99] = "hello world!"; |
2 | |
3 | SendDyn(911, feld); |
Thomas schrieb: > void SendDyn(uint8_t ID, uint8_t Data[])
1 | uint8_t feld[99] = "hello world!"; |
2 | |
3 | SendDyn(11, feld); |
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.
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
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); |
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. :)
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. :-/
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.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.