1

我想要堆上的原始 2D 浮点数组。我可以使用 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?

4

3 回答 3

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));
}

(当然,此时实际的浮点数组包含堆垃圾,因此您可能也想初始化它们。)

于 2013-03-22T21:38:20.897 回答
0

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

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

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

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

于 2013-03-22T21:38:18.993 回答
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]);
}
于 2013-03-22T23:33:17.080 回答