NSArray * array = [[NSArray alloc] init];
for (int i = 0; i < (array.count - 1); i++) {
NSLog(@"打印%ld", array.count-1);
}
上面这段代码,为什么控制台不停的打印-1? 按理说不应该执行NSLog那句代码啊。
NSArray * array = [[NSArray alloc] init];
for (int i = 0; i < (array.count - 1); i++) {
NSLog(@"打印%ld", array.count-1);
}
上面这段代码,为什么控制台不停的打印-1? 按理说不应该执行NSLog那句代码啊。
这是进行隐式转换,首先array.count是NSUInteger,1会进行转换,也变成无符号整型,当然两个的运算结果也会是无符号整型。运算结果是 -1就回被转化成一个很大的正数,这样你的for循环就会不停的打印。
但是
NSLog(@"打印%ld", array.count-1);
指定是按 ld类型输出,所以会再将数据转化成 -1.
2 回答1k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答2.7k 阅读
1 回答1.5k 阅读
1 回答1.4k 阅读
1.7k 阅读
1 回答1.1k 阅读
for循环没毛病! 主要是看懂类型转化就好理解了.
NSArray的count属性是NSUInteger, 无符号整形, 没有负数.负数赋值为无符号整形, 那么将会变成另外一个非常大的数.