我想在堆上有一个原始的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?
答案 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]);
}