Рассмотрим следующий код:
int square(volatile int *p)
{
return *p * *p;
}
Теперь ключевое слово volatile
указывает, что значение в
расположение памяти может быть изменено способами, неизвестными компилятору или
другие неизвестные побочные эффекты (например, изменение через прерывание сигнала,
аппаратного регистра или ввода-вывода с отображением памяти), хотя ничто в
код программы изменяет содержимое.
Итак, что именно происходит, когда мы объявляем указатель как volatile?
Будет ли вышеупомянутый код работать, или он не отличается от этого:
int square(volatile int *p)
{
int a = *p;
int b = *p
return a*b;
}
Можем ли мы умножить разные числа, поскольку указатели являются неустойчивыми?
Или есть лучший способ сделать это?