堆上的Objective C中的2D原始数组

时间:2013-03-22 20:53:06

标签: objective-c arrays multidimensional-array

我想在堆上有一个原始的2D float数组。我可以使用NSMutableArray作为包装器,但是为了性能,我想只使用原语。

在Objective-C WITH对象中执行此操作的方法:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:DIM1];

for (int i = 0; i < DIM1; i++) {
    array[i] = [NSMutableArray arrayWithCapacity:DIM2];
}

这就是我在C中所做的:

float **array = new float*[DIM1];
for(int i = 0; i < DIM; i++) {
    hotplate[i] = new float[DIM2];
}

如何实现这一目标是Objective-C?

3 个答案:

答案 0 :(得分:1)

Objective-C只是C上的一组扩展.C部分(如浮点数组)没有变化。你的问题是你在这里称之为“C”的实际上是C ++。这是你在C:

中的表现
float **array = malloc(DIM1 * sizeof(float*));
for(int i = 0; i < DIM1; i++) {
    hotplate[i] = malloc(DIM2 * sizeof(float));
}

(当然,实际的float数组此时包含堆垃圾,所以你可能也想初始化它们。)

答案 1 :(得分:0)

  

这就是我在C中所做的:float **array = new float*[DIM1];

不,那是C ++。这就是我在C中所做的事情:

float (*arr)[DIM1] = malloc(sizeof(*arr) * DIM2);

突然你摆脱了所有丑陋的for循环,但你可以有很好的2D下标语法。

答案 2 :(得分:0)

你的两个尺寸都是不变的(似乎)。你可以这样做。

typedef float two_dim_array [DIM1][DIM2];

extern int
main (void)
{

  two_dim_array *array = (two_dim_array *) malloc (sizeof(two_dim_array));
  (*array)[0][0] = 1.0;
  (*array)[2][2] = 4.0;
  printf ("%f, %f", (*array)[0][0], (*array)[2][2]);
}