我在最近的一次采访中被问到一个问题,下面定义了一个函数
int square(volatile int * p)
{
return *p**p;
}
Run Code Online (Sandbox Code Playgroud)
我被告知有一些问题是这个功能并不适合计算广场,我认为这是由于波动,谁能解释为什么?
可能存在一个假设,即因为*p是易失性访问,其值在每次评估期间可能不同,因此您应该只评估一次:
int q = *p;
return q * q;
Run Code Online (Sandbox Code Playgroud)
那当然是愚蠢的设计; 功能应该是真正的int square(int),呼叫者应该说square(*p).