NSDecimal对象旁边的方括号是什么意思?

时间:2010-07-20 02:05:56

标签: objective-c core-plot

我在我的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);

但我收到编译错误:

错误:下标值既不是数组也不是指针

有人可以向我解释一下吗?

2 个答案:

答案 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];