我正在尝试传递一个多数组(例如3x3),使用Objective C以矩阵类型的形式打印。 我对这门语言比较陌生而且卡住了。我可以传递单个数组,但是对于多个数组,我得到错误数组类型具有不完整的元素类型。
void printMat(float value[][], int rows, int col)
{
int j, k;
float printpt;
//Handles coloum printing
for (k=0; k<col; k++)
{
NSLog(@"/n");
//Handles row printing
for (j=0; j<rows; j++)
{
printpt = value[j][k];
NSLog(@"%f ", printpt);
}
}
}
我正在尝试用
调用该函数printMat(A, n, n)
其中A是浮点数A [30] [30],n = 30。 实现这一目标或通过多维数组的最佳方法是什么?
答案 0 :(得分:2)
将其作为float *value
传递,然后适当地计算到数组中的偏移量。 value[j*cols+k]
。
注意:data is held in the following order - 第一行(全部),第二行(全部)等))。
value[]
并非不完整,因为它的行为为value*
。
但是,value[][]
不完整,因为它无法在不知道第二个维度的情况下理解第一个[]
数组下标。出于同样的原因,语句value[j][k]
没有意义 - 如果不知道行大小,你如何解决这些列?
float value[][30]
工作正常,但不会帮助您,因为您想提供可变大小。
答案 1 :(得分:1)
对于一件事情来说这不是客观的C(除了NSLog语句)....在objective-c中你只需创建这样的数组:
NSArray *row1 = [NSArray arrayWithObjects:obj1,obj2,obj3,nil];
NSArray *row2 = [NSArray arrayWithObjects:obj3,obj4,obj5,nil];
NSArray *matrix = [NSArray arrayWithPjects:row1,row2,nil];
然后你的函数原型就是:
-(void) printMat:(NSArray *)matrix;