一个小笔试题在iOS上的不同表现

作者:达内 更新时间:2014-06-17 15:30 来源:未知 点击:
一个小笔试题在ios上的不同表现及原因。
    试题:
    #define product(x) ((x)*(x))
    - (void)test2
{
    NSInteger x = 3;
    NSInteger y = product(x++);
    NSLog(@"%d",y);
    NSInteger z = product(++x);
    NSLog(@"%d",z);
}
    经典的结果应该是y=9,z=49,但是ios上的结果是y=12,z=42。求解答?
    解答:为啥说:经典的结果应该是y=9,z=49,这个与编译器的有关。按我的理解,这个IOS是对的。
    #define product(x) ((x)*(x))
    先说第一个:
    NSInteger x = 3;
    NSInteger y = product(x++);
    先得到第一个括号里的x值为3,然后执行x++操作,x变为4,然后得到第二个括号里的x值,此时x值为4,所以(3)*(4) = 12,然后执行x++操作,x值变为5。
    第二个:
    NSInteger z = product(++x);
    NSLog(@"%d",z);
    先获得第一个x值,经过++x,此时x值变为6,获得第二个x值,经过++x,此时x值变为7, 所以z = (6)*(7) = 42。
标签:

相关阅读

最新开班信息

3G-IOS软件工程师就业班
北京潘家园中心 开课日期:9月29日
3G-IOS软件工程师就业班
北京潘家园中心 开课日期:9月29日
3G-IOS软件工程师周末班
北京潘家园中心 开课日期:9月29日
3G-IOS软件工程师周末班
北京潘家园中心 开课日期:9月29日