C/C++面试题

记录一些知识点比较有趣,且开发中可能涉及较多的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]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容