for-objective-c - 原始数组中的循环

时间:2009-03-09 14:17:33

标签: objective-c for-loop primitive

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()

这样的东西

4 个答案:

答案 0 :(得分:6)

对于静态创建的数组类型,可以使用sizeof运算符,例如

sizeof(myArray) / sizeof(myArray[0])

对于动态创建的数组(即通过指针引用),这将不起作用(sizeof将只给出系统上指针的大小)。在这种情况下,您需要常量或数组中的sentinal值。使用sentinal,只扫描每个轴,直到找到它的长度(这是C字符串的工作方式,使用\ 0)。

答案 1 :(得分:5)

在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 ~ $

答案 2 :(得分:1)

你可以像在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)

顶级数组的长度为3,每个子数组的长度为3,所以这应该有效:

for( int i = 0; i < 3; ++i ) {
      for( int j = 0; j < 3; ++j ) {
           // do something here for each element
      }
 }