【问题标题】:Init to zero a static 2D array at its declaration在其声明处初始化一个静态二维数组
【发布时间】:2013-04-29 09:21:55
【问题描述】:

我正在使用最新的 SDK 开发 iOS 5.0+ 应用程序。

我必须以这种方式声明一个私有二维数组,因为我将在 C++ 函数上使用它:

@implementation MyClass

int myArray[NSFirstDim][NSSecondDim] = 0; <-- Error here

...

- (id)init
{
...
}

...
@end

但我无法以这种方式初始化为 0,因为我收到以下消息:

Array initializer must be an initializer list

如何将所有值初始化为零?

或者我可以使用二维动态数组...

【问题讨论】:

  • 使用 std::vector 代替,甚至更好 - std::map。为什么要使用基于 C 的数组?
  • @art-divin:两者都有(可能很大)运行时成本,那么为什么要优先使用其中一个而不是简单的固定大小数组呢?特别是,map 完全不适合,除非可能会减少稀疏数组使用的存储空间。
  • @MikeSeymour 这种决策有很多优点和缺点,但对于更简单的方法,最好使用 std 或 objc 对象来实现。我们可以从这一行“因为我将在 C++ 函数上使用它”在作者只想在 C++ 方法中使用数组的问题中看到,他没有指定他正在尝试达到最大性能(即也在问号下)。
  • @art-divin:在这里使用数组没有任何缺点(至少与 C++ 容器相比;我对 Objective-C 的了解不够多,无法对此发表评论)——声明起来更方便和初始化,同样方便访问,而且效率更高。如果您要另外声明,那么您应该支持该声明,而不仅仅是说使用类在某种程度上是一种“更简单的方法”。
  • @MikeSeymour 很抱歉,我忘了说明在编程风格和未来代码支持的保险方面,这是一种更好的方法

标签: c++ ios objective-c c


【解决方案1】:

使用

int myArray[NSFirstDim][NSSecondDim] = {0};

这是来自 C 的强大行为,您从开始添加值,其余部分(其他)被初始化为 0。

在此示例代码中,

int arr[4][3]={1,2,3};

for (int i=0; i<4; i++) {
    for (int j=0; j<3; j++) {
        NSLog(@"%d",arr[i][j]);
    }
}

输出:1,2,3,0,0,0,....

【讨论】:

    【解决方案2】:
    int myArray[NSFirstDim][NSSecondDim] = {0};
    

    【讨论】:

      【解决方案3】:
      int myArray[NSFirstDim][NSSecondDim] = {0};
      

      该语句将二维数组的所有元素初始化为零。

      【讨论】:

        【解决方案4】:

        看看Initialising arrays in C++,我觉得很有用。

        这也可能有效: int myArray[NSFirstDim][NSSecondDim] = {};

        【讨论】:

          【解决方案5】:

          这个 int myArray[2][1] = { {0},{0}};

          【讨论】:

          • 我想知道这个int array[2][1] 有什么好处,两行各有一列。即只有 2 个值。
          • 只是另一种初始化方式:)。
          • 这是另一种方式int array[2][1][1][1][1][1][1]..[1]:p
          猜你喜欢
          • 1970-01-01
          • 2023-04-08
          • 1970-01-01
          • 2011-05-07
          • 2023-03-23
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          • 2021-04-04
          相关资源
          最近更新 更多