我想要一个基本的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]);
}