У меня есть часть кода, где я пытаюсь вернуть квадрат значения, на которое указывает *ptr
.
int square(volatile int *ptr)
{
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}
main()
{
int a=8,t;
t=square(&a);
printf("%d",t);
}
У меня он работает нормально, но автор этого кода сказал, что он может не работать по следующей причине:
Поскольку значение *ptr
может неожиданно измениться, возможно, что a и b будут разными. Следовательно, этот код может вернуть число, которое не является квадратом! Правильный способ -
long square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}
Я действительно хотел узнать, почему он так сказал?