2 次元配列を整数で初期化しようとしています。配列を 0 に初期化すると正しい結果が得られますが、他の整数を使用するとランダムな値が得られます。
int main()
{
int array[4][4];
memset(array,1,sizeof(int)*16);
printf("%d",array[1][2]); <---- Not set to 1
}
2 次元配列を整数で初期化しようとしています。配列を 0 に初期化すると正しい結果が得られますが、他の整数を使用するとランダムな値が得られます。
int main()
{
int array[4][4];
memset(array,1,sizeof(int)*16);
printf("%d",array[1][2]); <---- Not set to 1
}
memset
配列のすべてのバイトを1
すべてのint
要素ではなく設定します。
すべての値を 1 に設定した初期化子リストを使用するか、ループ ステートメントを使用して値1
をすべての要素にコピーします。
memset
バイト単位でのみ機能します。すべての整数ゼロは一般にすべてゼロのビットであるため、ビットをゼロにすることは一般的に機能します。そのため、4 つのすべてがゼロのビット バイトを 1 つのすべてがゼロのビットにグループ化してint
もゼロになります。ただし、バイトではないものの場合、すべてを初期化する最も簡単な方法は、すべてを明示的に初期化することです。
memset
個々のバイトをメモリとして埋めることができ、整数値 (おそらく 4 バイト以上) を設定しようとしています。アプローチは数値に対してのみ機能し、0
これら-1
は両方ともバイナリで00000000
またはとして表され11111111
ます。
for ループはそれほど面倒ではありません。
int main() {
int i, val = 1, max = 4;
int array[max][max];
max = max * max;
for(i = 0 i < max; i++) {
array[i] = val;
}
}
memsetはバイトで動作し、すべてのバイトを 1 に設定するためです。
memset(hash, 1, cnt);
16843009 = 0x01010101 = 1000000010000000100000001
Not 0x00000001
ただし、ブール値またはバイナリ値のみが必要な場合は、C ライブラリの C99 標準を使用して設定できます
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h> //Use C99 standard for C language which supports bool variables
int main()
{
int i, cnt = 5;
bool *hash = NULL;
hash = malloc(cnt);
memset(hash, 1, cnt);
printf("Hello, World!\n");
for(i=0; i<cnt; i++)
printf("%d ", hash[i]);
return 0;
}
出力:
こんにちは世界!
1 1 1 1 1