У меня есть фрагмент кода, где я пытаюсь вернуть квадрат значения, на которое указывает *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;
}
Я действительно хотел знать, почему он так сказал?