Posted on 2006-01-09 14:04
小明 閱讀(1688)
評(píng)論(12) 編輯 收藏 引用 所屬分類:
C/C++
1.無(wú)窮loop
int i,a[10];
for(i=0;i<=10;++i)
{
a[i] = 0 ;
}
why?
函數(shù)運(yùn)行時(shí)堆棧:
a[0] a[1] ....a[9] i
a[10] = 0;改變i的值為0,造成無(wú)窮循環(huán)
2.八進(jìn)制的誤用
int i[] = { 012,
024,
125,
};
為了對(duì)齊可能造成的錯(cuò)誤,變成了八進(jìn)制
3.如何調(diào)用地址為0的過(guò)程?
(*(void(*)())0)();
ps:在大多數(shù)現(xiàn)代操作系統(tǒng),進(jìn)程引用的地址為虛擬地址,所以這個(gè)調(diào)用可能合法
4.運(yùn)算符的優(yōu)先級(jí)
int i = 1;
i = i<<4 + 2;
這時(shí)i的值是多少?
不是18,是64,因?yàn)?i=i<<4+2; <==> i=i<<(4+2);
5.懸掛的if
if(x==0) //1
if(y==0) error(); //2
else{ //3
z=x+y;
f(&z);
}
C中的else總是和最近的if匹配,所以3和2匹配,而不是和1匹配。等價(jià)于
if(x==0) //1
{
if(y==0) error(); //2
else{ //3
z=x+y;
f(&z);
}
}
解決方法:總是使用{}和if配對(duì)