Существует очень небольшая разница между локальными static
с и обычными глобальными переменными.
int x = 42; //static lifetime, external name
static int y = 43; //static lifetime, no external name,
//referencable in all scopes here on out
//(unless overshadowed)
int main()
{
static int z = 44; //like y, but only referencable from within this scope
//and its nested scopes
{
printf("%p\n", (void*)&z));
}
}
Все они имеют фиксированные адреса после того, как программа была связана и загружена.
Локальная статикакак глобальные, за исключением того, что на них можно ссылаться только (по их имени) изнутри их области видимости и вложенных субскопов.(Вы можете ссылаться на них из несвязанных областей с помощью указателей.)