我的应用程序中发生了一件奇怪的事情。我有以下NSInteger
:
NSInteger *contentStart;
然后在viewDidLoad
,我做了:
contentStart=0;
然后在另一种方法中,我做了:
contentStart = contentStart + 20;
NSLog(@"%d", (int)contentStart);
输出为160而不是20!
我尝试了所有内容,我甚至尝试了contentStart+=20
,这给出了相同的结果。
谁能告诉我这里发生了什么?我为此疯狂。
非常感谢。
答案 0 :(得分:5)
NSInteger*
是NSInteger
变量的指针。
当你contentStart + 20
表示意思是你将指针移动到20 NSInteger
时。看起来你有64位环境。在64环境中,一个NSInteger
需要8个字节。所以8 * 20 = 160;
这就是为什么contentStart
的价值变为160而不是20的原因。
这是用指针计算的。
答案 1 :(得分:3)
问题是您要添加20 * sizeof(NSInteger)
,contentStart
类型为NSInteger *
,因此您正在进行指针运算。
我假设您正在构建64位sizeof(NSInteger) == 8
。
答案 2 :(得分:2)
由于sizeof(NSInteger)是8个字节,你将指针移动20 * sizeof(NSInteger),等于160
答案 3 :(得分:-2)
替换
NSInteger *contentStart;
使用
NSInteger contentStart;
你很高兴去:)
<强>解释强>
NSInteger是一种基本类型,这意味着它可以本地存储在堆栈中。您不需要使用指针来访问它。
对于想要完整解释的人,您可以看到this回答