Initialisieren eines float-array mit memset
Dies ist der code, den ich versuchen möchte zu schreiben:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int main(int argc, char *argv[])
{
float arry[3] = {0};
memset(arry, (int) 10.0, 3*sizeof(float));
return 0;
}
Mein problem ist, dass ich möchte, um zu sehen, ob es möglich ist, verwenden memset, um jeden Eintrag eines Arrays zu, der eine andere Zahl als 0 ist. Aber Nachdem wir durch diese Linie, die der array-Inhalt ändern, um eine sehr kleine Zahl (0). Ich Frage mich, was ich falsch mache in diesem Fall mit der memset () - Funktion. Ich hoffe, dies ist kein doppelter post, da keine der vorgeschlagenen Fragen, wie ich Schreibe dies zu sein scheint.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umwandlung eines double zu einem int erzeugt nur die binäre Zahl 00001010 (10 in Binär), und das ist der Wert, der memset ' ed. Da es ein char, jeden Ihrer Schwimmer ist tatsächlich empfangen das bit-Muster 00001010 00001010 00001010 00001010.
Memset übernimmt einen int, sondern wirft es in einen unsigned char und füllt dann jedes byte float (sizeof(float) ist wahrscheinlich 4) mit diesem bit-Muster. Wenn dies c++, lieber füllen statt:
Nicht. memset nimmt ein einzelnes byte, und schreibt Sie in das array. Ein Schwimmer ist ein multi-byte-Typ.
EDIT: ja, ich weiß, memset nimmt eine int. Aber es nutzt nur einen unsigned char (ein byte) zu füllen.
Warum nicht einfach eine einfache
for
Schleife?Eigentlich dein Versuch ist ein wenig irreführend, memset funktioniert auf bytes.. eigentlich mit einem Schwimmer für memset Wert macht keinen Sinn!
Den float-format hat nur 23+1 bits für die Mantisse und 8 bit für den Exponenten.. beim schreiben von raw-Byte-Werte (mit memset) innen ein Schwimmer Sie wissen nicht, was Sie erhalten, weil Sie die Einstellung, die Werte werden unterschiedlich gedeutet werden!
In Ihrem snippet, das Sie auch werfe es (int) drehen Sie eine 4-Byte-float mit 10.0 f in einem 4-Byte-Ganzzahl mit dem Wert 10.. aber wie gesagt, wenn du memset einen float mit 10 (= 0x0a), werden Sie end up Erhalt 0x0A0A0A0A, dass ist nicht 10.0 f im float-format, es kann alles sein, was Wert (auch etwas sehr in der Nähe von 0, wie in Ihrem Fall).
Eigentlich
memset
ist nützlich, wenn Sie möchten, initialisieren Sie ein array von chars (da Sie erhalten, effektiv, dass der Wert für jeden char, denn Sie sind 1 byte lang) oder, wenn Sie wollen, setzen Sie alles auf 0 (NULL), das funktioniert bei jeder grundlegenden Art von Daten..