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