我正在尝试做一件非常简单的事情,但我不知道怎么做;
NSInteger * a=10;
a=a-1;
NSlog(@"a=%d",a);
出于某种原因,它正在显示a=6
。
怎么会这样?
我正在尝试做一件非常简单的事情,但我不知道怎么做;
NSInteger * a=10;
a=a-1;
NSlog(@"a=%d",a);
出于某种原因,它正在显示a=6
。
怎么会这样?
您的问题是您已将变量声明a
为指针。大多数 Objective-C 变量都是指针,但这NSInteger
是一个例外,因为它只是typedef
'd to int
or long
。
您的代码应如下所示:
NSInteger a=10;
a=a-1;
NSlog(@"a=%d",a);
当您对指针进行数学运算时,您实际上是在移动它指向的内存中的位置。例如,如果 an 的大小NSInteger
为 4 ( sizeof(NSInteger) == 4
),将其移动 -1,或者换句话说,将一个结构大小向后移动,指针将减少 4。当迭代结构数组时,这种机制在 C 中被大量使用,例如
CGPoint myPoints[4];
CGPoint* point = myPoints; //get the first point
for (NSUInteger i = 0; i < 4; i++) {
CGPoint currentPoint = *point;
point++; //moves to the next point, adding sizeof(CGPoint)
}
这称为指针算术,您可以用不同的方式编写它,例如pointer + 1
but 也point[1]
or 1[point]
(最后两个实际上等于*(pointer + 1)
)。