کاربرد های اشاره گر ها در ++C/C

اشاره گر ها (Pointers) در واقع متغیر هایی هستند که آدرس سایر متغیر ها را در خود نگه می دارند. همین ویژگی موجب شده است تا اشاره گر ها یکی از ویژگی های قدرتمند زبان های C/C++ باشد که سایر زبان ها از داشتن آن محروم هستند. علاوه بر آدرس متغیر ها، می توان محتوای آن متغیر را نیز توسط اشاره گر ها به دست آورد. در ادامه به برخی از مهم ترین کاربرد های اشاره گر ها در زبان های سی و سی پلاس پلاس خواهیم پرداخت.

1 – ارسال پارامتر ها به صورت ارجاع

در حالت عادی اگر متغیری را به عنوان آرگومان یا پارامتر به تابع بفرستید، کامپایلر یک کپی از آن متغیر ایجاد کرده و آن کپی را به جای متغیر اصلی به تابع ارسال می کند. در این صورت هر تغییری که بر روی آرگومان در تابع صورت گیرد، در واقع بر روی کپی اعمال شده و متغیر اصلی تغییری نخواهد کرد. اما با استفاده از اشاره گر ها می توانید متغیر اصلی را به عنوان آرگومان ارسال کنید. به این روش اصطلاحا Pass by reference یا ارسال به صورت ارجاع می گویند.

این امر می تواند کاربرد ها و مزایای مختلفی داشته باشد. یک نمونه مثال از کاربرد های آن می توان به تابع جا به جا کردن مقدار دو متغیر اشاره کرد. (کد زیر به زبان C نوشته شده است)

پس از فراخوانی تابع ()swap ، مقدار x برابر با 20 و مقدار y برابر با 10 خواهد بود.

ارسال به صورت ارجاع مزایای نیز دارد از جمله اینکه تابع از پارامتر هایش کپی ایجاد نکرده و حافظه کمتری مصرف می شود.

2 – دسترسی به عناصر یک آرایه

از دیگر کاربرد های اشاره گر ها می توان به دسترسی به عناصر یک آرایه اشارع کرد. در حالت عادی از اندیس و براکت [] برای دسترسی به عناصر آرایه ها استفاده می کنیم، اما جالب است که بدانید در اصل کامپایلر برای دسترسی به عناصر یک آرایه از اشاره گر ها استفاده می کند. کد زیر را مشاهده کنید تا بهتر متوجه شوید.

خروجی:

3 – برگرداندن چندین مقدار از یک تابع

هر تابع با استفاده از دستور return می تواند تنها یک مقدار را برگرداند. اما با استفاده از قابلیت ارسال به صورت ارجاع، می توانیم مقادیر برگشتی مورد نظرمان را به عنوان آرگومان به تابع ارسال کنیم تا آن تابع مقدار مورد نظر را به آن ها دهد.

به مثال زیر توجه کنید:

خروجی:

4 – مدیریت حافظه پویا

برای اختصاص یا اخذ حافظه پویا، در زبان C از تابع ()alloc و در زبان C++ از کلمه کلیدی new استفاده می کنیم. تفاوت حافظه پویا (heap) با حافظه استک (stack) در این است که خود برنامه نویس باید حافظه گرفته شده را آزاد کند(برخلاف متغیر های محلی، تا زمانی که برنامه نویس آن را آزاد نکند، همیشه در دسترس است). همچنین در حافظه پویا با محدودیت رو به رو نیستیم و می توانیم هر اندازه که بخواهیم (تا جایی که حافظه سیستم پشتیبانی کند)، حافظه را برای برنامه خود بگیریم.

5 – پیاده سازی ساختمان های داده مختلف

یکی دیگر از کاربرد های اشاره گر ها ، پیاده سازی ساختمان های داده مختلف است. با استفاده از اشاره گر ها می توانیم ساختار یا ساختمان های داده مختلفی از جمله لینک های پیوندی، درخت ها و … را ایجاد کنیم. همچنین بسیاری از ساختار های آماده کتابخانه های سی پلاس پلاس از اشاره گر ها استفاده می کنند.

6 – برای نوشتن برنامه های در سطح سیستم

در برنامه نویسی سیستمی مانند ارتباطات بین پردازشی یا فرآیندها (IPC)، برنامه نویسی سوکت شبکه و همچنین حافظه به اشتراک گذاشته شده بین چندین نخ (Thread) که دانستن آدرس های حافظه و متغیر ها مفید و کارا هستند، اشاره گر ها نقش پر رنگی را ایفا می کنند. اساسا یکی از دلایلی که زبان های C و C++ برای ایجاد برنامه های سیستمی انتخاب می شوند، انعطاف پذیری بالای آن ها در کار با حافظه است که از طریق اشاره گر ها میسر می شود.

QR:  کاربرد های اشاره گر ها در ++C/C
به اشتراک بگذارید