Schönen Abend
ich bin leider zu Blöd Pointer zu verstehen Und zwar verwende ich eine Bibliothek die Wake on Lan Pakete mit folgender Methode versenden kann.
WOL.sendMagicPacket();
In der Dokumentation dazu findet man folgenden Eintrag:
const char *MACAddress = "01:23:45:67:89:AB";
WOL.sendMagicPacket(MACAddress);`
Warum wird hier ein Pointer verwendet?
Warum nicht einfach char MACAddress?
Ich weiß das Pointer auf die Speicheradresse zeigen, aber ich verstehe nicht warum ich nicht einfach direkt die Variable übergebe, sondern eine Speicheradresse?
Außerdem hab ich eine Klasse Namens Device mit char mac als Variable.
Mit device.getmac() kann ich diese dann aufrufen und soweit ich verstanden habe kann ich mit & die Speicheradresse einer Variable abrufen aber wie kombiniere ich das ganze dann?
WOL.sendMagicPacket(&device.getmac()); so bekomm ich leider immer eine Fehlermeldung.
Eine Variable vom Typ "char" kann nur ein Byte speichern. Darum funktioniert char MACAddress nicht. Im vorliegenden Beispiel ist "char*" die Startadresse eines Zeichenarrays.
Eine andere, etwas verständlichere Schreibweise wäre const char MACAddress[] = "01:23:45:67:89:AB";
WOL.sendMagicPacket(&device.getmac()); mach das & weg.
Fehlermeldungen kann man lesen.
Man kann sie sogar hier zeigen.
Wenn du sie geheim halten möchtest, auch gut.
Aber warum sagst du dann, dass es eine gibt, ohne sie zu zeigen?
Das ist in etwa so, als würde ich jedem, der mir über den Weg läuft, erzählen:
Ich könnte dir 100 Euronen schenken.
Es aber dann doch nie tun.
Also erst heiß machen, und wenn es an die Sache geht dann doch kneifen....
Im Übrigen bool WakeOnLan::sendMagicPacket(const char* _macAddress, uint16_t _portNum)
will auch noch eine Portnummer haben. Üblicherweise ist das 9 oder 40000.
Hab die Fehlermeldung nicht hier im Post reingebracht weil ich schon wusste das die herangehensweise komplett falsch ist. Aber danke beim nächsten mal vielleicht keine schlechte idee.
text1 ist eine als Variablenfeld gespeicherte Zeichenkette, die mit dem Zeichen '\0' abgeschlossen wird. Fünf Buchstaben benötigen daher sechs Feldelemente1). Werden die Feldgrenzen nicht überschritten, kann der Inhalt verändert und erweitert werden. Dabei muß man das Zeichenkettenendezeichen manuell setzen2).
text2 mit Sternchen für einen Zeiger wird vom Kompiler nur als Konstante akzeptiert. Ändern kann man die Zeichenkette also nicht, aber etwas Zeigerarithmetik ist möglich.
Zahlen wie z1 werden in der Funktion als Kopie verwendet. Änderungen sind nur innerhalb der Funktion gültig, nach Ausführung der Funktion wird die Kopie gelöscht. Daher ist z1++ sinnlos.
Zahlen wie z2 werden wegen & in der Funktion als Referenz verwendet. Änderungen an z2 ändern auch zaehler2, also zwei Namen für eine Variable3).
Kopie und Referenz sollten je nach Anwendung bewußt gewählt werden!
Anm.:
Bei UTF-8 kann ein Buchstabe aus bis zu vier Feldelementen bestehen!
Ich lasse mich dabei gerne von Funktionen wie snprintf unterstützen.
Wichtig bei Interrupts, die jederzeit dazwischenfunken können.