Parameter 2 von memcpy und konsorte
-
Warum ist der 2. Parameter von memcpy() vom type const also :
memcpy(pkt_data ,pkt_data ,header->len); ^ --------------------|
Warum muss die umbedingt konstant sein?
Danke schonmal
-
Das ist ein Hinweis an dich, das der Inhalt (auf den der Zeiger verweist) nicht geändert wird.
-
Sonst könntest du keine Kopien von Konstanten machen.
-
Und es ermöglicht Dir überhaupt erst, auch Zeiger auf const-qualifizierte Daten als Quelle zu übergeben.
-
Und wenn ich keine Konstante als Parameter übergebe? Ist dass schlim?
-
Nö. Aber manchmal hat man halt Konstanten in seinem Programm. Und manchmal will man auch die mal kopieren. Und das geht halt nicht, wenn die dazu aufgerufene Funktion nicht die Garantie gibt, das sie den übergebenen Parameter nicht ändert.
Wäre memcpy also so deklariert:
memcpy(..., void * source, ...);
könnte man:
const char * name = "Peter Pan"; memcpy(..., name, ...);
nicht aufrufen.
-
Man könnte memcpy so aufrufen, der Compiler würde das mit einer Warnmeldung übersetzen.
-
Mhm, jo stimmt, erst ein C++ - Compiler lässt das nicht mehr durchgehen.