Что не так с этим кодом на C

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

Я действительно хотел узнать, почему он так сказал?

12
задан palacsint 16 January 2012 в 13:18
поделиться