FOR命令中的表达式(FOR (int i=0;我& lt;((arr计数)1);我+ +){})



我有一个问题我不明白

NSArray *emptyArr = @[];
for (int i=0; i < ([emptyArr count]-1) ; i++) {
    NSLog(@"Did run for1");
}

[emptyArr count] -1是-1,但我的应用程序仍然运行NSLog命令!

如果我使用int变量:

NSArray *emptyArr = @[];
int count = [emptyArr count]-1;
for (int i=0; i < count ; i++) {
    NSLog(@"Did run for1");
}

然后我的应用程序不运行NSLog命令。

谁来帮帮我!

这是因为count的返回类型是无符号 int。当你用0减去1时,得到的不是-1。相反,你下流到最高的unsigned int。它在第二个版本中工作的原因是因为您将它(隐式地)强制转换为值-1合法的int

[emptyArr count]-1永远不会小于0,因为它是无符号的。我猜如果你做((int)[emptyArr count]-1),你会得到正确的行为。

[emptyArr count]返回值为无符号整数。在第一种情况下,[emptyArr count]-1表示0-1,这是一个很大的数字。因此,它会多次打印日志。

在第二个例子中,[emptyArr count]-1 ->将结果强制转换为int。0-1 -> -1有符号整型。因此不打印。

相关内容

  • 没有找到相关文章

最新更新