我在我的iPhone应用程序的图形组件中使用了核心图,我一直在使用NSDecimal
对象。
我看到他们的代码中的一行是这样的:
-(void)plotPoint:(NSDecimal *)plotPoint forPlotAreaViewPoint:(CGPoint)point
{
NSDecimal x;
//do some calculations on x
plotPoint[CPCoordinateX] = x;
}
其中,CPCoordinateX的定义如下:
typedef enum _CPCoordinate {
CPCoordinateX = 0, ///< X axis
CPCoordinateY = 1, ///< Y axis
CPCoordinateZ = 2 ///< Z axis
} CPCoordinate;
该行:
plotPoint[CPCoordinateX] = x;
是我不明白的,如何将NSDecimal分配给这样的人?
在我的代码中,我试图调用此方法,如下所示:
NSDecimal dec = CPDecimalFromInteger(0);
[plotSpace plotPoint:&dec forPlotAreaViewPoint:point];
NSDecimalNumber *newx = [[NSDecimalNumber alloc] initWithDecimal:dec];
NSDecimal x = dec[CPCoordinateX];
//NSLog(@"converted at: %@", newx);
但我收到编译错误:
错误:下标值既不是数组也不是指针
有人可以向我解释一下吗?
答案 0 :(得分:4)
这是一个C阵列。
答案 1 :(得分:4)
plotPoint
是一个指针,指针可以像使用下标运算符的数组一样索引:
int array[] = { 1, 2, 3 };
NSLog(@"x=%d, y=%d, z=%d", array[0], array[1], array[2]);
// prints "x=1, y=2, z=3"
int *pointer = array; // implicit conversion to pointer
NSLog(@"x=%d, y=%d, z=%d", pointer[0], pointer[1], pointer[2]);
// also prints "x=1, y=2, z=3"
您还可以将这些表达式用于分配:
array[0] = 4;
pointer[1] = 5;
但是你只能在数组或指针上使用下标运算符:
NSDecimal dec = CPDecimalFromInteger(0);
dec[0]; // illegal, dec is a single NSDecimal value, not pointer or array
要实际传递点-plotPoint:forPlotArrayViewPoint:
,您需要一个C风格的数组或2或3 NSDecimal
的动态数组(根据方法所需的尺寸),例如:
NSDecimal decPoint[] = {
CPDecimalFromInteger(0),
CPDecimalFromInteger(0),
CPDecimalFromInteger(0)
};
[plotSpace plotPoint:decPoint forPlotAreaViewPoint:point];
在该数组上,您现在还可以使用下标运算符:
NSDecimal x = decPoint[CPCoordinateX];