понедельник, 28 декабря 2009 г.

Static в С

Всегда у меня этот static какие-то затруднения вызывал, а на самом деле все просто.

Если в модуле глобальная переменная объявлена static, то она видна только из этого модуля. То же самое, если static стоит в объявлении функции.

Если в функции локальная переменная объявлена static, то она сохраняет свое значение между вызовами функций. Инициализируется только один раз. Вот пример - скользящее среднее:

double average(double x)
{
static double count = 0;
static double sum = 0;

++count;
sum += x;

return sum/count;
}

int main()
{
cout << "average = " << average(1) << endl;
cout << "average = " << average(2) << endl;
cout << "average = " << average(4) << endl;
}

В функции average переменные count и sum будут инициализированы нулями только при первом вызове функции. Можно объявлять в разных функциях статические переменные с одинаковыми именами - компилятор следит за соответсвием.

Ой, а вот тут нашел на YouTube как дядька под гармошку на площади поет Русское поле экспериментов чуть ли не лучше Летова: http://www.youtube.com/watch?v=Bxhx1tlzn44

Комментариев нет: