Posted on 2006-01-09 14:04
小明 阅读(1674)
评论(12) 编辑 收藏 引用 所属分类:
C/C++
1.无穷loop
int i,a[10];
for(i=0;i<=10;++i)
{
a[i] = 0 ;
}
why?
函数运行时堆栈:
a[0] a[1] ....a[9] i
a[10] = 0;改变i的值为0,造成无穷循环
2.八进制的误用
int i[] = { 012,
024,
125,
};
为了对齐可能造成的错误,变成了八进制
3.如何调用地址为0的过程?
(*(void(*)())0)();
ps:在大多数现代操作系统,进程引用的地址为虚拟地址,所以这个调用可能合法
4.运算符的优先级
int i = 1;
i = i<<4 + 2;
这时i的值是多少?
不是18,是64,因为 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匹配。等价于
if(x==0) //1
{
if(y==0) error(); //2
else{ //3
z=x+y;
f(&z);
}
}
解决方法:总是使用{}和if配对