حال میخواهیم قلمرو متغیرها را بررسی کنیم؛ یعنی تعیین نماییم که هر متغیر در چه قسمتی از برنامه یا در کدام یک از توابع شناخته شده است.
متغیرهایی را که در داخل یک تابع توصیف گردند متغیرهای محلی یا متغیرهای خصوصی نامند. این گونه متغیرها فقط در درون همان تابع شناخته میشوند و سایر توابع یا تابع اصلی آنها را نمیشناسد و به همین دلیل به آنها متغیرهای محلی یا خصوصی میگویند؛ یعنی خاص آن تابع مورد نظر است. در C، این گونه متغیرها را متغیرهای خودکار میشناسند. به هرحال این گونه متغیرها فقط باید در داخل بلوکی که توصیف شدهاند به کار روند و در خارج بلوک خاص خود شناخته شده نیستند. یادآوری میشود که هر بلوک در زبان C با آکولاد باز آغاز و به آکولاد بسته خاتمه مییابد.
نکته مهم دیگر درباره این گونه متغیرها آن است که آنها فقط در موقعی که اجرای برنامه وارد بلوک مربوط به آنها میشود وجود دارند و با خروج از بلوک مربوط، متغیرهای مزبور دیگر وجود ندارند. به عبارت دیگر، هنگام ورود به بلوک حافظههای مورد نظر به این گونه متغیرها اختصاص داده میشوند و با خارج شدن از بلوک آن حافظهها آزاد میگردند و دیگر در اختیار آن متغیرها نیستند.
متداولترین بلوکی که متغیرهای محلی توصیف میگردند، بلوک مربوط به یک تابع است.
مثال دو تابع زیر را در نظر بگیرید.
func1()
{
int n ;
n = 5 ;
printf(“%d” , n) ;
}
func2()
{
int n ;
n = 22 ;
printf(“%d” , n) ;
}
ملاحظه میکنید که متغیر n دوبار توصیف شده است؛ یکبار در تابع اول، بار دیگر در تابع دوم. با اینکه نام متغیر در هر دو تابع یکسان است، هیچ ارتباطی بین این دو وجود ندارد. متغیر n اولی فقط در درون تابع func1 و متغیر n دومی نیز فقط در درون تابع func2 شناخته میشود.
متداول است که نام متغیرهای یک تابع در آغاز تابع توصیف شود. ولی به هرحال این کار الزامی نیست، بلکه میتوان متغیرهای محلی را در درون هر بلوک که مجموعهای دستورند، توصیف کرد.