2014-09-01 2 views
-1

У меня есть простой вопрос о статических переменных. Если я объявлена ​​статической переменной в функции:Локальная область статической переменной в C

void main() 
{ 
    int k = 0 
    while(k<=4) 
    { 
     fun(); 
     k++; 
    } 
} 
int fun() 
{ 
    static int i=5; 
    i++; 
    printf(Value %d\t", i); 
    return 0; 
} 

Как я знаю, функция будет освобождать после возвращения. Но где хранится значение i. Является статической переменной как глобальная переменная.

+0

'Статично как глобальная переменная.' Нет !!!! это то же самое с точки зрения времени жизни. Различные с точки зрения видимости. –

+0

Сначала исправьте ошибки синтаксиса, а затем перейдите к философским вопросам :) –

+1

В спецификации C не указано, где должны храниться переменные, а только то, что время жизни локальных статических переменных находится над всей программой. Однако компиляторы обычно хранят локальные статические переменные вместе с глобальными переменными. –

ответ

2

Функция не освобождает i внутри fun() по возвращении. Хранилище для i находится в той же общей области, что и глобальные переменные, но это не глобальная переменная. Он доступен только внутри функции fun(), где он определен. Он отделен от любой глобальной переменной i или любой другой переменной i, которая является статичной внутри любой другой функции (в любом исходном файле) или из области действия статической переменной i в исходном файле, где определен fun(). Он имеет продолжительность жизни, пока программа.

1

Как я знаю, функция освободится после возвращения - No. Я думаю, ваше предположение неверно!

static переменные не будут освобождены после возврата из функции.

Где хранятся? - static переменные хранятся в разделе «Данные» или «Память данных».

Life - Срок службы переменной static начинается, когда программа загружается в ОЗУ и заканчивается при завершении выполнения программы!

Смежные вопросы