記錄一些知識點比較有趣,且開發(fā)中可能涉及較多的C/C++相關(guān)面試題
- (void)test
{
unsigned int a = 6;
int b = -20;
(a+b > 6) ? NSLog(@">6") : NSLog(@"<=6");
}
輸出:>6
分析:b和a運算,精度會自動轉(zhuǎn)為unsigned int,涉及C語言整數(shù)自動轉(zhuǎn)換原則:當表達式中存在有符號類型和無符號類型時,所有的操作數(shù)都自動轉(zhuǎn)換為無符號類型。
- (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,系統(tǒng)會認為是加一個a數(shù)組的偏移,本處即是5,ptr實際就是a+5。
- a,&a地址一樣,但是意義不一樣,a是數(shù)組首地址,&a是對象首地址,a+1是數(shù)組下一個元素的地址,&a+1是下一個對象地址,即a[5]