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 只会为您提供系统上指针的大小)。在这种情况下,您需要常量或数组中的标记值。使用哨兵,只需扫描每个轴,直到找到它的长度(这就是 C 字符串的工作方式,使用 \0)。
在 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
}
}