2016-10-18 4 views
2

私はmemsetを使って1で2D配列を塗りつぶしてみます。各バイトのなぜmemsetは2d配列に0を正しく埋めますが、その配列に1を書き込むのに失敗しますか?

int arr[3][3]; 
memset(arr,1,sizeof(arr)); 
Result : 
16843009 16843009 16843009 
16843009 16843009 16843009 
16843009 16843009 16843009 
+3

これをチェックhttp://stackoverflow.com/questions/14761015/memset-an-array-to-1 –

+0

か'man memset'だけで、*** bytes ***という単語に特に注意を払います。 –

答えて

1

memsetは、他のステップサイズに関係なくバイトレベルで動作します。あなたのintが大きいため、各それらのバイトの4つのバイトが00000001bに設定されているので、

00000001000000010000000100000001b = 16843009 
1
memset(arr,1,sizeof(arr)); 

作業。 intは4バイト(変更可能)なので、memet 1はint値を16843009(bianry 00000001000000010000000100000001)にするすべてのバイトに書き込みます。

関連する問題