C/C++面试题

作者: ThaiLanKing | 来源:发表于2017-07-23 16:26 被阅读137次

    记录一些知识点比较有趣,且开发中可能涉及较多的C/C++相关面试题


    - (void)test
    {
        unsigned int a = 6;
        int b = -20;
        (a+b > 6) ? NSLog(@">6") : NSLog(@"<=6");
    }
    
    输出:>6
    

    分析:b和a运算,精度会自动转为unsigned int,涉及C语言整数自动转换原则:当表达式中存在有符号类型和无符号类型时,所有的操作数都自动转换为无符号类型。


    - (void)test
    {
        int a[5] = {1, 2, 3, 4, 5};
        int *ptr = (int *)(&a+1);
        printf("%d, %d", *(a+1), *(ptr-1));
    }
    
    输出:2, 5
    

    分析:*(a+1)就是a[1],*(ptr-1)就是a[4]

    • &a+1不是首地址加1,系统会认为是加一个a数组的偏移,本处即是5,ptr实际就是a+5。
    • a,&a地址一样,但是意义不一样,a是数组首地址,&a是对象首地址,a+1是数组下一个元素的地址,&a+1是下一个对象地址,即a[5]

    相关文章

      网友评论

        本文标题:C/C++面试题

        本文链接:https://www.haomeiwen.com/subject/jpsmkxtx.html