私は現在memset関数を研究していますが、すべての例は次のようにchar配列に関するものです。
char a[100];
memset(a, 0, 100);
このchar配列のすべての要素を0に設定します。
memsetがint配列またはfloat配列に適用できるかどうか疑問に思いましたか?
はい、任意のメモリ バッファに適用できますが、正しいメモリ バッファ サイズを入力する必要があります。memset
任意のメモリ バッファを一連のバイトとして扱います。ただし、マルチバイト型をゼロ以外の特定の値に設定しないことに注意してください...例:char
int
float
double
int a[100];
memset(a, 1, sizeof(a));
の各メンバーを値 1 に設定するのではなく、 to によって使用されるメモリ バッファー内のすべてのバイトを設定します。これは、4 バイトごとに値 が設定されることを意味します。a
a
1
int
0x01010101
0x00000001
任意の配列に適用できます。最後の 100 はバイト単位のサイズであるため、整数はそれぞれ 4 バイトになるため、次のようになります。
int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
それを得る?:)
静的サイズの可変長配列の場合、次のことができます
<arbitrary-type> foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes
経験則: [データ サイズ] をハードコーディングしないでください。
(関数の引数として配列を渡す場合、これは機能しません: Behavior of Sizeof in C )