【问题标题】:Array of arrays with ints带有整数的数组数组
【发布时间】:2011-12-15 16:47:43
【问题描述】:

如何将二维整数数组存储为类变量?

如果你想要一个整数数组,你可以去:

类声明

int * myInts;

实施

int ints[3] = {1,2,3};
myInts = ints;

但是如果你想用整数存储一个数组呢?

像这样:

 int ints[3][3] = {{1,2,3}, {1,2,3}, {1,2,3}};

我不想在类声明中限制数组的大小,所以我想我必须使用指针,但是如何?

【问题讨论】:

  • 你试过int ** myInts;吗?
  • Michael Kerlin:很抱歉没有你聪明:/
  • Daniel R Hick:然后你将如何用实际的整数填充这个双指针?如果你有一个普通的指针,你可以使用 malloc(sizeof(int)*numInts) ,但是我该怎么做呢? int ** myInts = malloc(sizeof(??)*numArrs);
  • 查看 this 或许多其他您可以通过搜索 2d array allocation C 在 StackOverflow 中找到的帖子
  • 再次感谢,为我无法在生活中取得成功感到抱歉

标签: objective-c c


【解决方案1】:

为了将来参考,这是我的结论:

类声明

 int ** ints;

实施

 int rows = 2;
 int cols = 5;

 ints = (int**)malloc(rows*sizeof(int*));
 ints[0] = (int*)malloc(cols*sizeof(int));

 ints[0][0] = 123;
 ints[0][1] = 456;
 ints[0][2] = 789;
 // etc

这是我自己对 cme​​ts 中提供的链接的解释,并且我的 C 技能相当低,因此请考虑到这一点;)也许有更好的方法可以使用 {123,456,789} 或其他方式一次输入多个数字,但那就是暂时超出了我的要求!

【讨论】:

    【解决方案2】:

    我已经为你编写了示例:

    int N = 10, M = 15;
    NSMutableArray *ints = [NSMutableArray arrayWithCapacity:N]; // array[N][M]
    for (int i=0; i<N; i++)
    {
        NSMutableArray *arr = [NSMutableArray arrayWithCapacity:M];
        for (int j=0; j<M; j++)
        {
            [arr addObject:[NSNumber numberWithInt:(i+1)*(j+1)]];
        }
        [ints addObject:arr];
    }
    // print
    for (int i=0; i<[ints count]; i++)
    {
        NSString *line = @"";
        NSMutableArray *arr = [ints objectAtIndex:i];
        for (int j=0; j<[arr count]; j++)
            line = [NSString stringWithFormat:@"%@ %@", line, [arr objectAtIndex:j]];
        NSLog(@"%@", line);
    }
    

    【讨论】:

    • 谢谢,但这是为了一个游戏,所以我不想为了性能而使用一堆对象。
    • 那么你需要C风格的实现吗?
    【解决方案3】:

    如果你想动态分配内存,也就是说在运行时定义数组的大小,那么你需要将数组声明为一个指针,malloc它,然后在运行时为每个索引添加另一个整数数组。您不能真正在类级别声明和动态分配。如果你使用的是 cocoa/iphone sdk,你可以使用 NSMutableArray。

    您还可以创建自己的类,该类构造一个二维数组并公开推送和弹出 int 对象的方法,例如 [IntegerArray push:x,y,n];

    这是 Daniel R Hicks 指出的使用 double reference 的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-29
      • 2016-01-21
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2023-01-23
      相关资源
      最近更新 更多