C语言面试题:与指针相关的问题,附答案和详解

疯狂一夏 分享于 2天前 1397阅 0人收藏此代码, 我要收藏

这是一道经典的C语言与指针相关的面试题,代码的主体只有一句,三个星号表示的指针足以搞得人头晕眼花,下面附带了该题目的详细运行过程和解释。

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

上面的代码编译后会产生类似下面的代码
 // http://www.sharejs.com
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;  
}  

标签:
  • 面试题
  • 指针
  • C语言