متغیرهای محلی (local):
متغیرهایی که در بدنه تابع معرفی میشوند، متغیرهای محلی هستند که فقط در همان تابعی که معرفی شدهاند قابل استفاده هستند. پارامترهای تابع نیز که در عنوان تابع معرفی شدهاند متغیرهای محلی هستند.
در برنامهنویسی متغیر خودکار (Automatic variable) به متغیری گفته میشود که وقتی جریان اجرای برنامه وارد حوضه متغیر میشود، حافظه سیستم به صورت خودکار به آن متغیر تخصیص مییابد و با خارج شدن جریان برنامه از حوضه متغیر، متغیر مورد نظر به شکل خودکار آزاد شده و فضای آن به سیستم پس داده میشود. اصطلاح متغیر محلی هم گاهی اوقات مترادف با اصطلاح متغیر خودکار استفاده میشود اما آنها مجزا هستند و با هم تفاوت دارند. هرچند که در بسیاری از زبانهای برنامهنویسی، آنها مشابه هم هستند، اما متغیر محلی عمومیت بیشتری دارد، بیشتر متغیرهای محلی، متغیر خودکار هم هستند، اما متغیر ایستای محلی هم وجود دارد که با خارج شدن جریان اجرای برنامه همچنان در حافظه باقی میماند. در متغیرهای محلی ایستا، تخصیص حافظه به شکل ایستا صورت میگیرد و در کل زمان اجرای برنامه ثابت است و به شکل خودکار نیست. اما به این متغیرها فقط میتوان در حوضهای که تعریف شدهاند دسترسی داشت.
در زبان c و ++c به این متغیرها، متغیر خودکار گفته میشود. تمام متغیرهایی که در داخل یک بلاک تعریف میشود، به صورت پیش فرض از نوع خودکار هستند. اما میتوان به کمک کلمه کلیدی auto هم یک متغیر خودکار را اعلام کرد. متغیر خودکاری که هنوز مقداردهی نشده، حاوی یک مقدار تصادفی است. استفاده از کلمه register در اعلان متغیرها، باعث میشود تا کامپایلر سعی کند متغیر مورد نظر را در ثبات پردازنده قرار دهد. چون متغیرهای کلاس register در حافظه ذخیره نمیشوند، نمیتوان با عملگر & آدرس آنها را بدست آورد.
در زبان ++c وقتی که اجرای برنامه به محل اعلان متغیر میرسد، سازندهی متغیر خودکار فراخوانی میشود. وقتی هم که اجرای برنامه از بلاک کد مورد نظر خارج میشود، مخرب به اجرا درمیآید. این ویژگی اغلب برای مدیریت کردن اختصاص منابع و آزادسازی آنها استفاده میشود.
متغیرهای سراسری (global):
این متغیرها را میتوان خارج از توابع مثلاً ابتدای برنامه قبل از تعریف تابع Main یا قبل از تعریف هر تابع دیگر معرفی کرد. متغیرهایی که خارج از توابع معرفی شوند، توسط کلیه توابعی که از آن به بعد تعریف شدهاند، قابل استفادهاند.
پس از هر فراخوانی همین که اجرای تابع خاتمه یافت، متغیرهای محلی آن از بین میروند. ولی متغیرهای سراسری تا پایان اجرای تابع mainفعال و قابل استفادهاند.
برای درک بیشتر این مفاهیم میتوانید به لینک زیر مراجعه کنید:
http://en.wikipedia.org/wiki/Local_variable