人心易变,这段有趣的C代码也一样!!!

时间:2022-07-22
本文章向大家介绍人心易变,这段有趣的C代码也一样!!!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

C语言中的volatile关键字也许大部分人都听过,但实际用过的人可能不多,它的字面意思是“易变的”。今天我们的题目就跟它有关,这也是一道比较著名和经典的面试题,不同公司对它进行过多次考察,代码如下:

int square(volatile int *p){
  return(*p)*(*p);
}

函数意思大家都明白,就是计算整数的平方,就问上面的代码有没有问题?

我们都知道为了提高效率编译器会对程序进行一定的优化,但有时“自作聪明”的编译器也会帮倒忙,刚开始我们提到volatile关键字的字面意思是“易变的,不固定的”,用它来修饰变量,目的就是告诉编译器你不要管我,不要对我进行优化,我是“易变的”。

回到本题,如果说编译器在编译上述代码时,把它等价为如下:

int square(volatile int *p){
  int a=*p;
  int b=*p;
  return a*b;
}

由于volatile的缘故,*p随时可能改变,假如在执行完int a=*p后,*p的值变了,那很显然a和b的值不想等,那计算出来自然也不是平方了,怎么修改呢?如下:

int square(volatile int *p){
  int a=*p;
  return a*a;
}

从今天这道经典的面试题可以看出,面对一些比较少用的关键字,绝对不能掉以轻心,而对于编译器的自动优化问题,它是否帮了倒忙?这也是我们需要考量的一个关键点。其实这些都需要我们具备扎实的编程基本功,只有这样,才能尽量少出错甚至不出错,希望今天的知识对大家有所帮助,感谢耐心阅读!

End