二维原始数组在Objective C的堆



我想要一个基本的2D浮点数组在堆上。我可以使用NSMutableArray作为包装器,但出于性能考虑,我只想使用原语。

在Objective-C中使用对象实现的方法:

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中实现这一点?

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

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

这是我在C: float **array = new float*[DIM1];

中要做的

不,那是c++。这是我在C中要做的:

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

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

您的两个维度都是恒定的(似乎)。你可以这样做。

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

相关内容

  • 没有找到相关文章