int matrix[3][3] = {
{1,2,3},
{1,2,3},
{1,2,3},
}
どうすればそれをループできますか?
基本的に長さの操作は私の関心事です。
for (int i=0; XXXXX; i++) {
for (int j=0; XXXX; j++) {
int value = matrix[i][j];
}
}
編集:配列サイズを取得する動的な方法はありますか? みたいなsizeof()?
int matrix[3][3] = {
{1,2,3},
{1,2,3},
{1,2,3},
}
どうすればそれをループできますか?
基本的に長さの操作は私の関心事です。
for (int i=0; XXXXX; i++) {
for (int j=0; XXXX; j++) {
int value = matrix[i][j];
}
}
編集:配列サイズを取得する動的な方法はありますか? みたいなsizeof()?
静的に作成された配列型の場合、sizeof 演算子を使用できます。
sizeof(myArray) / sizeof(myArray[0])
動的に作成された配列 (つまり、ポインターによって参照される) の場合、これは機能しません (sizeof はシステム上のポインターのサイズを与えるだけです)。この場合、定数または配列内のセンティナル値のいずれかが必要です。センチナルを使用して、長さが見つかるまで各軸をスキャンするだけです (これは \0 を使用した C 文字列の動作です)。
Cでは、次のことを行います。試してください:
sizeof( matrix ) /sizeof( matrix[0] ) <- outer array
sizeof( matrix[0] )/ sizeof( matrix[0][0] ) <- inner array
linux ~ $ cat sizeof_test.c
#include <stdio.h>
int main( void )
{
int matrix[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, };
int matrix2[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, {1,2,3}, };
int matrix3[][4] = { {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, };
printf( "array (%d) - elements( %d )\n", sizeof( matrix ) /sizeof( matrix[0] ), sizeof( matrix[0] )/ sizeof( matrix[0][0] ));
printf( "array (%d) - elements( %d )\n", sizeof( matrix2 ) /sizeof( matrix2[0] ), sizeof( matrix2[0] )/ sizeof( matrix2[0][0] ));
printf( "array (%d) - elements( %d )\n", sizeof( matrix3 ) /sizeof( matrix3[0] ), sizeof( matrix3[0] )/ sizeof( matrix3[0][0] ));
return 0;
}
linux ~ $ gcc sizeof_test.c -o sizeof_test
linux ~ $ ./sizeof_test
array (3) - elements( 3 )
array (4) - elements( 3 )
array (4) - elements( 4 )
linux ~ $
これは、C で行うのと同じように行うことができます。
int matrix[3][3] = { {1,2,3}, {1,2,3}, {1,2,3}, };
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
int value = matrix[i][j];
}
}
ただし、マジック 3 の代わりに定数を使用することをお勧めします。すべて、特に for ループが読みやすくなります。
最上位配列の長さは 3、各サブ配列の長さは 3 であるため、これは機能するはずです。
for( int i = 0; i < 3; ++i ) {
for( int j = 0; j < 3; ++j ) {
// do something here for each element
}
}