Objective-c:为什么0 + 20 = 160?

时间:2015-05-18 14:04:43

标签: objective-c

我的应用程序中发生了一件奇怪的事情。我有以下NSInteger

NSInteger *contentStart;

然后在viewDidLoad,我做了:

contentStart=0;

然后在另一种方法中,我做了:

contentStart = contentStart + 20;
NSLog(@"%d", (int)contentStart);

输出为160而不是20!

我尝试了所有内容,我甚至尝试了contentStart+=20,这给出了相同的结果。

谁能告诉我这里发生了什么?我为此疯狂。

非常感谢。

4 个答案:

答案 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回答