【问题标题】:Length of an `int` array in Objective CObjective C中“int”数组的长度
【发布时间】:2009-10-07 07:22:38
【问题描述】:

我将一个整数数组传递给一个函数。 接下来我要遍历数组。 在 C 和 C++ 中,这通过简单地使用 arrayname.length 来工作,它给出了数组中元素的数量。在 Objective-C 中找到它的方法是什么?

[NSArrayObject length] 适用于 NSArray 类型,但我希望它适用于 int[]。甚至[XYZ count] 都不起作用(已经建议的答案)所以我在这里寻找另一种方式。

【问题讨论】:

    标签: arrays c objective-c


    【解决方案1】:

    你可以使用[XYZ count]来获取数组的长度

    【讨论】:

    • 问题是关于C数组,没有计数选择器。
    【解决方案2】:

    Objective-C 没有任何特定于整数数组的东西。您将使用与使用 C 相同的技术。

    sz = (sizeof foo) / (sizeof foo[0]);
    

    【讨论】:

    • 我试过这个...我看到了一个二维数组的 dis 但我的数组是一维的...就像 int foo[] 所以我做 sizeof(foo)/sizeof(foo [0]) 它返回 4/4 即 1 ..我已经尝试过了...但是没有运气..还有其他方法吗?谢谢
    • @Darpan:这仅在您声明 int foo[5] 而不是 int foo[] 时有效。
    • 同意 mouviciel,这不会得到你想要的。
    • 我已经对此进行了实验。显示 int foo[] 长度的正确方法是使用 sizeof (foo)/4 。需要除以 4。它也适用于非原始(NSString)。
    【解决方案3】:

    C 中没有 array.length 这样的东西。Objective-C 中的 int 数组与 C 中的 int 数组完全相同。如果它像 int foo[5] 那样静态定义,那么您可以使用sizeof(foo) 来获取大小——但只能在同一函数中定义foo(对于其他函数,它只是一个int 指针,而不是数组本身)。否则,没有固有的方法来获取此信息。您需要传递大小或使用标记值(例如 C 字符串中的终止 '\0',它们只是 char 数组)。

    【讨论】:

    • 我正在寻找长度,即整数数组中的元素数。而不是 sizeof.as wen id o sizeof 它只是返回 sizeof int
    • 正如我所说,没有办法。 sizeof() 适用于静态大小的数组,就像我在上面给出的示例中定义它们的函数一样。这是最接近 C 的支持。
    【解决方案4】:

    嗯?在 C 中,没有“arrayname.length”这样的东西。基本类型的数组,例如int[],在运行时没有任何与之关联的长度信息。

    【讨论】:

      【解决方案5】:

      [array count] 这似乎在 Objective-c 中最简单

      【讨论】:

        【解决方案6】:

        当数组中元素的总数未知时,可以使用此代码。

        main()
        {
            int a[]={1,2,3,4,5,6,7}
            int i;
            clrscr();
            for (i=0;i<=((sizeof(a)/sizeof(int));i++)
            {
                puts(a[i]);
            }
            getch();
        }
        

        【讨论】:

        • 一行文本前 4 个空格告诉网站使用代码格式。要在多行代码之前快速放置 4 个空格,请选择所有行并单击 {} 按钮。我为你修好了,让它可读。
        【解决方案7】:

        C 中没有 arrayname.length 这样的东西。这就是为什么这么多函数采用参数对的原因,一个参数带有数组,一个参数带有数组的长度。最明显的例子是 main 函数。你可以在一个名为 main.m 的文件中找到这个函数是你所有的 iPhone 项目,它看起来像这样:

        int main(int argc, char *argv[]) {    
          NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
          int retVal = UIApplicationMain(argc, argv, nil, nil);
          [pool release];
          return retVal;
        }
        

        注意argv 参数是一个v 向量或字符串数​​组,而argc 参数是c多少个项目在这个数组中。

        你必须对所有原始类型做同样的事情,这是 Objective-C 的 C 部分。如果您留在 Objective 部分,使用 NSArray 或子类可以正常工作,但要求所有元素都是对象。

        【讨论】:

          【解决方案8】:

          看起来像是NSMutableArray 的工作。是否有理由需要使用 C 数组?如果没有,请考虑NSMutableArray

          我可能是错的(如果我错了,请纠正我),但在 C 语言中没有简单的方法可以在运行时获取 int[] 的大小。你必须做一些事情,比如创建一个结构来保存你的数组和一个 int,你可以在其中自己跟踪数组中有多少项。

          更棒的是,你可以让你的结构体容纳你的数组和一个块。然后你可以设计块来为你做跟踪。

          但这更像是一个 C 问题,而不是一个客观 C 问题。

          【讨论】:

            【解决方案9】:

            如果您想要一个整数数组,请将它们包装在 NSNumber 对象中并将它们放入 NSArray。

            您要求做的事情在 C 中并没有得到很好的支持,尽管您可以在 mac 上尝试一种方法 (malloc_size):

            determine size of dynamically allocated memory in c

            【讨论】:

              【解决方案10】:

              您应该尝试以下方法:

              float ptArray[] = {97.8, 92.3, 89.4, 85.7, 81.0, 73.4, 53.0, 42.3, 29.4, 14.1};
              
              int x = sizeof(ptArray)/sizeof(ptArray[0]);
              
               NSLog(@"array count = %d", x);
              

              输出

              array count = 10
              

              【讨论】:

              • 除了发布一些代码之外,包含对正在发生的事情的描述会很有帮助。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-07-24
              • 2016-05-09
              • 1970-01-01
              • 1970-01-01
              • 2014-07-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多