三, 纠错题
(注: 以下题目或来之博客, 或来之书籍, 或来之原创, 或来之远方, 或来之情怀, 不一而足, 如有雷同, 敬请谅解. )
1, 下面的函数有什么错误:
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
Answer:
由于*ptr指向volatile型参数, 编译器产生类似代码.
int square(volatile int *ptr)
{
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}
由于*ptr的值可能被意向不到地改变. 因此a和b可能是不同的. 因此可能无法返回期望的平方值. 正确代码应该如此.
long square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}
2, 下列函数有什么错误.
int main()
{
const int x=5;
const int *ptr;
ptr=&x;
*ptr=10;
printf("%d\n",x);
return 0;
}
Anser:编译出错。
知识点: const是在编译器编译过程中来执行检查.