تعریف جامعی از متغیرهای محلی و سراسری (فیلد)
سلام دوستان
من خیلی جاها تعاریف متغیرهای محلی و فیلدها رو خوندم و شاید خیلی جاها ازشون استفاده کرده ام. ولی فهمیدم که معانی این متغرها فراتر از این تعاریف است. کسی میتونه یک تعریف جامع و کامل (تمام حالت های ممکن) از متغیرهای محلی و متغیرهای عضو کلاس یا همان متغیرهای سراسری و یا همان فیلدها بگه؟؟
3 پاسخ
میتونید تعریفشونو با pseudocode بگید که بهتر بفهمم؟
متغیرهای محلی (local Variables):
متغیرها یا فیلد هایی که در بدنه تابع معرفی میشوند(بدنه تابع همان Bigin و End هست مثلاً در زبان سی شارپ { } یا بعضاً با نام بلاک معرفی میشود )، متغیرهای محلی یا Local Variables گفته میشود که فقط در همان تابعی که معرفی شدهاند قابل استفاده هستند. پارامترهای تابع نیز که در عنوان تابع معرفی شدهاند متغیرهای محلی هستند.
"فقط در همان تابع "یعنی اگر شما یک متغیر به نام i را در یک تابع استفاده کنید تا زمانی که داخل تابع هستید میتوانید از این i استفاده کنید ولی اگر خارج از تابع i را صدا بزنید کامپایلر آن را نمیشناسد البته در زبان های برنامه نویسی مختلف کمی تغییرات وجود دارد.
در برنامهنویسی متغیر خودکار (Automatic variable) به متغیری گفته میشود که وقتی جریان اجرای برنامه وارد حوضه متغیر میشود، حافظه سیستم به صورت خودکار به آن متغیر تخصیص مییابد و با خارج شدن جریان برنامه از حوضه متغیر، متغیر مورد نظر به شکل خودکار آزاد شده و فضای آن به سیستم پس داده میشود. اصطلاح متغیر محلی هم گاهی اوقات مترادف با اصطلاح متغیر خودکار استفاده میشود اما آنها مجزا هستند و با هم تفاوت دارند. هرچند که در بسیاری از زبانهای برنامهنویسی، آنها مشابه هم هستند، اما متغیر محلی عمومیت بیشتری دارد، بیشتر متغیرهای محلی، متغیر خودکار هم هستند، اما متغیر ایستای محلی هم وجود دارد که با خارج شدن جریان اجرای برنامه همچنان در حافظه باقی میماند. در متغیرهای محلی ایستا، تخصیص حافظه به شکل ایستا صورت میگیرد و در کل زمان اجرای برنامه ثابت است و به شکل خودکار نیست. اما به این متغیرها فقط میتوان در حوضهای که تعریف شدهاند دسترسی داشت.
در زبان c و ++c به این متغیرها، متغیر خودکار گفته میشود. تمام متغیرهایی که در داخل یک بلاک تعریف میشود، به صورت پیش فرض از نوع خودکار هستند. اما میتوان به کمک کلمه کلیدی auto هم یک متغیر خودکار را اعلام کرد. متغیر خودکاری که هنوز مقداردهی نشده، حاوی یک مقدار تصادفی است. استفاده از کلمه register در اعلان متغیرها، باعث میشود تا کامپایلر سعی کند متغیر مورد نظر را در ثبات پردازنده قرار دهد. چون متغیرهای کلاس register در حافظه ذخیره نمیشوند، نمیتوان با عملگر & آدرس آنها را بدست آورد.
در زبان ++c وقتی که اجرای برنامه به محل اعلان متغیر میرسد، سازندهی متغیر خودکار فراخوانی میشود. وقتی هم که اجرای برنامه از بلاک کد مورد نظر خارج میشود، مخرب به اجرا درمیآید. این ویژگی اغلب برای مدیریت کردن اختصاص منابع و آزادسازی آنها استفاده میشود.
متغیرهای سراسری ( global variables):
این متغیرها را میتوان خارج از توابع مثلاً ابتدای برنامه قبل از تعریف تابع Main یا قبل از تعریف هر تابع دیگر معرفی کرد. متغیرهایی که خارج از توابع معرفی شوند، توسط کلیه توابعی که از آن به بعد تعریف شدهاند، قابل استفادهاند.
پس از هر فراخوانی همین که اجرای تابع خاتمه یافت، متغیرهای محلی آن از بین میروند. ولی متغیرهای سراسری تا پایان اجرای تابع mainفعال و قابل استفادهاند و استفاده زیاد از این ها باعث از بین رفتن حافظه میشود ولی استفاده از متغیر های محلی مدیریت حافظه بهینه تری دارند.
آیا از متغیر محلی می توان بین دو شئ استفاده کرد؟ اگر میشود، میشه یک مثال بزنید؟ اصلا این که از یک متغیر بین دو شی استفاده می شود یعنی چی؟