volatile作为参数标识符

Uin*_*t32 4 c pointers

我在最近的一次采访中被问到一个问题,下面定义了一个函数

int square(volatile int * p)
{
    return *p**p;
}
Run Code Online (Sandbox Code Playgroud)

我被告知有一些问题是这个功能并不适合计算广场,我认为这是由于波动,谁能解释为什么?

Ker*_* SB 7

可能存在一个假设,即因为*p是易失性访问,其值在每次评估期间可能不同,因此您应该只评估一次:

int q = *p;
return q * q;
Run Code Online (Sandbox Code Playgroud)

那当然是愚蠢的设计; 功能应该是真正的int square(int),呼叫者应该说square(*p).