2013-02-07 2 views
6

いくつかの整数で2次元配列を初期化しようとしています。配列を0に初期化すると正しい結果が得られますが、他の整数を使用するとランダムな値が得られます。 1ないすべてのintの要素にあなたの配列の各バイトを設定memset配列を1にする

int main() 
{ 
    int array[4][4]; 
    memset(array,1,sizeof(int)*16); 
    printf("%d",array[1][2]); <---- Not set to 1 
} 
+2

は、あなたがこのためにmemset_pattern4、memset_pattern8、またはmemset_pattern16を使用することができますforループ

ザ・はあまり気にしないです。 –

答えて

10

memset

すべての値を1に設定したイニシャライザリストまたはループ文を使用して、すべての要素に値1をコピーします。

4

memsetは、バイト単位でのみ動作します。すべての整数ゼロは一般にすべてゼロビットなので、ビットをゼロにすることは一般的に機能します。したがって、4つの全ゼロビットのバイトを1つのオールゼロビットintにグループ化すると、ゼロになります。バイトではないものについては、すべてを初期化する最も簡単な方法は、それらをすべて明示的に初期化することです。

+0

すべての返信ありがとうございます。 – user968000

2

memsetあなたはメモリとして個々のバイトを埋めることができます、あなたは整数値で設定しようとしている(多分4バイト以上を。)これらは両方00000000としてバイナリで表現されるようあなたのアプローチだけで数0-1上で動作しますか11111111

のMac OS X上で
int main() { 
    int i, val = 1, max = 4; 
    int array[max][max]; 

    max = max * max; 

    for(i = 0 i < max; i++) { 
     array[i] = val; 
    } 
} 
関連する問題