 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Nico Render Guest
|
Posted: Sun Jan 29, 2006 1:02 pm Post subject: Frage zu einem Funrkionskopf |
|
|
Hallo,
da ich ein Neuling in C++ bin, habe ich mal eine Frage zu Zeigern und
Funktionen. Gegeben sei der Kopf: void *memcpy(void *feldadr1, const void
*feldadr2, size_t groesse). Diese Funktion kopiert groesse Elemente des
Feldes beginnend bei feldadr2 in das Feld beginnend bei feldadr1. Rückgabe
ist feldadr1. Grundsätzlich int *funktion(int a) gibt doch eine Adresse bzw.
einen Zeiger vom Typ int zurück, oder? Wenn das stimmt, was soll denn void
als Datentypangabe bei den Paramtern und was soll denn size_t für ein
Datentyp sein??
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Jan 29, 2006 7:00 pm Post subject: Re: Frage zu einem Funrkionskopf |
|
|
"Nico Render" <render34 (AT) aol (DOT) de> writes:
| Quote: | da ich ein Neuling in C++ bin, habe ich mal eine Frage zu Zeigern und
Funktionen. Gegeben sei der Kopf: void *memcpy(void *feldadr1, const void
*feldadr2, size_t groesse). Diese Funktion kopiert groesse Elemente des
Feldes beginnend bei feldadr2 in das Feld beginnend bei feldadr1.
|
.... und funktioniert nur korrekt, wenn die beiden Bereiche sich nicht
überlappen.
| Quote: | Rückgabe ist feldadr1. Grundsätzlich int *funktion(int a) gibt doch
eine Adresse bzw. einen Zeiger vom Typ int zurück, oder?
|
Ja.
| Quote: | Wenn das stimmt, was soll denn void als Datentypangabe bei den
Paramtern
|
memcpy() ist eine alte Funktion aus der Standard C-Bibliothek. In C
gibt es keine Templates; void * wurde verwendet, damit die Funktion
trotzdem für das Kopieren von Feldern mit beliebigem Elementtyp
verwendet kann.
Wobei "beliebig" sich (im wesentlichen) auf die Typen beschränkt,
welche in C vorkommen können. Wenn Du in einem C++-Programm memcpy()
für das Kopieren eines Felds verwendest, dessen Elementtyp nicht ein
sog. "POD-Typ" (plain old data) ist, hat das Programm undefiniertes
Verhalten.
Es empfiehlt sich deshalb, in C++-Programmen statt memcpy() das
Standardbibliotheks-Template copy() zu verwenden. Dieses kann für das
Kopieren von Sequenzen (einschliesslich Felder) jedes kopierbaren Typs
verwendet werden.
| Quote: | und was soll denn size_t für ein Datentyp sein??
|
size_t ist u.a. der Typ von sizeof-Ausdrücken. Es ist ein
vorzeichenloser Typ, der für die Angabe der Grösse von Objekten und
Feldern verwendet werden kann.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|