我正在试着做一件非常简单的事情,但是我不知道怎么做;
NSInteger * a=10;
a=a-1;
NSlog(@"a=%d",a);出于某种原因,它显示的是a=6。
怎么会这样呢?
发布于 2013-06-09 19:01:48
您的问题是您已经将变量a声明为指针。大多数Objective-C变量都是指针,但NSInteger是个例外,因为它只是指向int或long的typedef'd。
您的代码应如下所示:
NSInteger a=10;
a=a-1;
NSlog(@"a=%d",a);当你在一个指针上做数学运算时,你实际上是在移动它在内存中指向的位置。例如,如果NSInteger的大小是4 (sizeof(NSInteger) == 4),将它移回-1,或者换句话说,一个结构大小的后移,指针将减少4。
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,也可以是point[1]或1[point] (最后两个实际上等于*(pointer + 1))。
https://stackoverflow.com/questions/17008904
复制相似问题