【问题标题】:int++ increments by 4int++ 递增 4
【发布时间】:2012-07-30 04:16:02
【问题描述】:

这是我的代码:

- (IBAction)NextTouched:(id)sender {
    NSLog(@"Index = %i", index);
    if([project getCount]>(index++)) {
        [self setUI:index];
    }
}

索引是一个整数,在我的 .h 文件中声明:

@property (nonatomic) int *index;

但是每次我点击按钮时,日志都会显示整数增加了 4。你能告诉我为什么吗?

【问题讨论】:

  • 显示index 声明。不是指针而不是整数吗?
  • 你为什么要在日志调用中增加它?你没有得到实际值,你得到的是实际值减 1(即在 ++ 运算符增加它之前)。
  • 哎呀,我已经编辑了代码:P
  • 您可能只需将@property (nonatomic) int *index; 更改为@property (nonatomic) int index;。另外,为了将来参考,不要忽略编译器警告!
  • index 不是整数,index 是指向整数的指针。我一直想知道为什么这么多人写 int index。是的,由于 int *index、*ptr、anInt 的旧 C 遗产......可怕的风格 methink。 int 索引,这就是你所拥有的。诠释*。放弃明星:)

标签: iphone objective-c ios int


【解决方案1】:

只需将 index 定义为 整数变量 而不是 pointer,如果您想在递增之前打印值,请使用 index++ 否则使用 ++index 来递增值,然后打印

【讨论】:

    【解决方案2】:

    它上升 4 的原因是因为index 是一个指针。当你增加一个指针时,它的值会随着它指向的数据类型的大小而增加,在本例中是 int,即 4 个字节。

    鉴于index 似乎是NSArray(或其他一些集合类)的索引,我认为您希望使用int 而不是int * 来解决您的问题。最好还是让它无符号,比如NSUInteger,这是count方法返回的类型。

    另外我认为你会想要使用前缀增量而不是后缀增量,以便 if 测试使用新增加的值,而不是之前的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      相关资源
      最近更新 更多