ich versuch mich gerade mit Pointern anzufreunden...
Löblich, oder verwerflich (je nach persönlicher Einstellung). Man kann mit so einem Pointer irrtümlich ganz beliebig irgendwo hinschreiben

Darin hab ich nun 2 gleichnamige Funktionen gefunden, wobei eine die andere aufzurufen scheint.
void DS1307::get(uint8_t *sec, uint8_t *min, uint8_t *hour, uint8_t *day, uint8_t *month, uint16_t *year)
{
...
return;
}
void DS1307::get(int *sec, int *min, int *hour, int *day, int *month, int *year)
{
return get((uint8_t*)sec, (uint8_t*)min, (uint8_t*)hour, (uint8_t*)day, (uint8_t*)month, (uint16_t*)year);
}
Was ist der Sinn und wie funktioniert dies????
Das Stichwort lautet (Funktions-)Überladung. Dabei können mehrere Funktionen den gleichen Namen haben. Sie müssen sich nur im Typ und/oder der Anzahl der übergebenen Parameter unterscheiden (im Beispiel einmal Pointer auf 8-Bit-Werte und einmal Pointer auf 16-Bit-Werte). Auf diese Weise kann der Ersteller der Library für seine Nutzer spezialisierte Versionen einer Funktion zur Verfügung stellen. Man stelle sich zum Beispiel eine Funktion mit Namen Multi() vor, die einmal zur Multiplikation von 8-Bit int-Werten oder zur Multiplikation von 16-Bit int-Werten oder zur Multiplikation von float-Werten dienen kann. Es gäbe dann drei Funktionen, die alle Multi heißen, sich aber im Typ der Parameter unterscheiden würden.
Müßte nicht eine Funktion allein reichen?
Kommt drauf an. Braucht man nur eine Version, dann ja. Möchte man unterschiedliche Versionen zur Verfügung stellen, dann nein.
Dann könnte man zwar auch komplett unterschiedliche Versionen schreiben, aber der Aufwand wäre natürlich größer. Hier in diesem Fall wird die 1. Version von get() praktisch "recycelt", um ohne großen Aufwand eine 2. Version zu schaffen.
Wieso wird in der zweiten Funktion bei
(uint8_t*)sec
die Klammer gesetzt?
Die zweite Funktion get() hat ja Pointer auf int-Werte als Parameter. Da in der 2. Funktion aber die ursprüngliche 1. Version mit Pointern auf 8-Bit-Werte aufgerufen wird, muss mit (uint8_t*) der Datentyp des Parameters auf uint8_t* gewandelt werden, damit "es passt". Diese Kontruktion nennt man "cast". Damit wird also der übergebene Datentyp "pointer auf int" bei der 2. Version von get() auf den Datentyp "pointer auf "uint8_t" gewandelt.
Danke im Voraus für Eure Hilfe!
Bitte, gern geschehen.
Wolfgang
Edit: Da war wohl jemand schneller. Aber ich war ausführlicher
