首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSInteger = NSInteger -1?

NSInteger = NSInteger -1?
EN

Stack Overflow用户
提问于 2013-06-09 18:57:41
回答 1查看 2.1K关注 0票数 3

我正在试着做一件非常简单的事情,但是我不知道怎么做;

代码语言:javascript
复制
NSInteger * a=10;
a=a-1;
NSlog(@"a=%d",a);

出于某种原因,它显示的是a=6

怎么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-09 19:01:48

您的问题是您已经将变量a声明为指针。大多数Objective-C变量都是指针,但NSInteger是个例外,因为它只是指向intlongtypedef'd。

您的代码应如下所示:

代码语言:javascript
复制
NSInteger a=10;
a=a-1;
NSlog(@"a=%d",a);

当你在一个指针上做数学运算时,你实际上是在移动它在内存中指向的位置。例如,如果NSInteger的大小是4 (sizeof(NSInteger) == 4),将它移回-1,或者换句话说,一个结构大小的后移,指针将减少4。

代码语言:javascript
复制
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))。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17008904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档