در برنامه‌ای تک‌فایل، هرکدام از متغیرهای ایستا در همان فایلی که مربوط به آن‌اند تعریف می‌شوند. بنابراین قلمرو آنها مشابه متغیرهای خودکار است؛ یعنی نسبت به تابعی که در درون آن تعریف شده‌اند محلی‌اند. اما به هرحال این گونه متغیرها، برخلاف متغیرهای خودکار، در تمامی مدت اجرای برنامه مقدار خود را نگهداری می‌کنند؛ یعنی با خروج از تابع، مقدار قبلی خود را حفظ می‌کنند و با ورود مجدد به تابع همان مقادیری را دارایند که در موقع خروج از تابع داشتند. این ویژگی، این اجازه را به تابع می‌دهد که متغیرهای مورد نظر در تمامی مدت اجرای برنامه مقدار خود را از دست ندهند.
متغیرهای ایستا در درون تابع به همان شیوه‌ای که در مورد متغیرهای خودکار بیان شد تعریف می‌شوند، با این تفاوت که توصیف متغیر باید با مشخص ساختن کلاس حافظه به کمک کلمه کلیدی static مشخص گردد. این گونه متغیرها مشابه همان متغیرهای خودکار، در درون تابع به کار می‌روند. به هرحال امکان دستیابی به این متغیرها خارج از تابعی که در درون آن تعریف شده‌اند ممکن نیست.
می‌توان متغیرهای خودکار و ایستا را همنام با متغیرهای خارجی تعریف کرد. بنابراین، در چنین مواردی هر گونه تغییر در متغیرهای خودکار و ایستا هیچ‌گونه نقشی در مورد متغیرهای عمومی همنام با آنها نخواهد داشت.
مثال  برنامه زیر را درنظر بگیرید.
float a , b , c ;
main()
{
static float a ;
void dummy(void) ;
}
void site (void) ;
{
static int a ;
int b ;
}
در این برنامه، متغیرهای a، b، c به صورت اعشاری و خارجی معرفی شده‌اند، اما متغیر a مجدداً در درون تابع main به صورت اعشاری و ایستا تعریف شده است. بنابراین در این تابع فقط دو متغیر c و b متغیرهای خارجی‌اند و متغیر محلی a مستقل از متغیر خارجی a خواهد بود.
به طریق مشابه متغیرهای a و b که در درون تابع site مجدد از نوع صحیح تعریف شده‌اند، متغیرهای محلی آن تابع خواهند بود که البته a از کلاس حافظه ایستاست، ولی b حافظه خودکار است. بنابراین هنگام خروج از تابع، متغیر a مقدار قبلی خود را حفظ خواهد کرد، اما b آن را از دست خواهد داد. متغیر c نیز در این تابع متغیر خارجی است، ولی a و b که محلی‌اند از متغیرهای a و b خارجی مستقل خواهند بود.

هنگام توصیف متغیرهای محلی ایستا، می‌توان آنها را مقداردهی اولیه کرد؛ یعنی به آنها مقدار اولیه نیز اختصاص داد که اگر به‌این‌گونه متغیرها مقدار اولیه اختصاص داده نشود، کامپایلر مقدار آنها را اغلب صفر درنظر می‌گیرد. همچنین مقدار اولیه باید به شکل ثابت بیان گردند نه عبارت.