اشاره گر به تابع

چرا از اشاره گر به تابع استفاده میکنیم؟؟؟؟؟؟؟؟
مگه استفاده از تابع چه مشکلی ایجاد میکنه؟
لطفا ساده و کامل توضیح بدید

گاهی اوقات هست که می‌خواهیم یکی از ورودی‌های یک تابع، به جای یک پارامتر مثلا عددی، یک تابع دیگر باشد. برای مثال اگر بخواهید تابعی تعریف کنید که انتگرال معین (یا مشتق) یک تابع دلخواه را محاسبه کند، یکی از ورودی‌های تابع را اشاره‌گر به تابع تعریف می‌کنید تا بتوانید در ضمن فراخوانی تابع انتگرال‌گیر (یا مشتق‌گیر) از هر تابع دلخواهی استفاده کنید.

پی‌نوشت: اگر با حسابان آشنایی ندارید، بگویید چه زمینه کاری دارید شاید بتوانم مثال دیگری بزنم.

1 پسندیده

خیلی ممنون از راهنماییتون، بله با حسابان آشنا هستم، میشه توضیحی رو که دادید رو با کدنویسی براش مثال بزنید و روی اون توضیح بدید
ببخشید یه سوال دیگه هم داشتم اشاره گر یه متغیر هست که آدرس یه متغیر رو در خودش ذخیره کرده، پس این متغیر که اشاره گر هست آدرس خودش هم باید داخل یه اشاره گر دیگه ذخیره شده باشه، میشه بگید آدرس متغیر اشاره گر چطور تو یه اشاره گر دیگه ذخیره میشه، نوشتنش چطور میشه؟
و اینکه چرا اصلا آرایه ها و توابع رو به اشاره گر میفرستیم و با اشاره گر کار میکنیم؟ فقط برای سرعت بالاتر؟
ببخشید که سوالام زیاد شدن

با یک جستجوی ساده میتونید مثالش رو در اینترنت پیدا کنید.

این که می‌گویید باید ذخیره شده باشه، درست نیست. می‌تواند ذخیره بشود. اگر برای ذخیره آدرس هر متغیر یک متغیر دیگر داشته باشیم که به بی‌نهایت متغیر نیاز داریم. کامپایلر در حین کامپایل به هر متغیر یک آدرس اختصاص می‌دهد و آن را در متن (دستورات) برنامه ذخیره می‌کند.

در ذخیره شدن اشاره‌گرها هیچ فرقی با هم ندارند. هر متغیر یک آدرس دارد و مقدار آن آدرس ذخیره می‌شود.

یک تابع یک رشته از دستورات هست که اندازه معینی نداره. یک آرایه هم در حالت کلی اندازه معینی نداره. یا باید آدرس اول این رشته دستورات یا آرایه را فرستاد (که همان اشار‌گر است)، یا همه آن را کپی کرد. راه دوم علاوه بر بحث زمان این مشکل را هم داره که اندازه حافظه مورد نیاز ورودی نامعین می‌شود.
در C++ راه‌های دیگری برای ارسال تابع و آرایه وجود دارد اما در تعریف خود آنها هم از اشاره‌گر استفاده می‌شود.

تفاوت انواع مختلف اشاره‌گر

انواع مختلف اشاره‌گر در دو چیز تفاوت دارند:
یکی در نوع داده بعد از عمل dereference برای مثال اشاره‌گر به int بعد از dereference یک int خواهد بود.
دومی در نتیجه جمع و تفریق با اعداد صحیح است. بعد از هر بار جمع (یا تفریق) با یک به اندازه تعداد بایت نوع داده‌ای که به آن اشاره می‌شود به مقدار اشاره‌گر افزوده (یا کاهیده) می‌شود. مثلا اگر اندازه int برابر ۴ بایت باشد و شما آدرس یک متغیر int را - مثلا ۱۰۲۴ - در یک اشاره‌گر int بریزید بعد آن را با یک جمع کنید می‌شود ۱۰۲۸ چون متغیر int (بلافاصله) بعدی در صورت وجود در این آدرس است.

1 پسندیده

خیلی ممنون از راهنماییتون