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