نحوه انتقال یک آرایه به یک تابع

فهرست مطالب:

نحوه انتقال یک آرایه به یک تابع
نحوه انتقال یک آرایه به یک تابع

تصویری: نحوه انتقال یک آرایه به یک تابع

تصویری: نحوه انتقال یک آرایه به یک تابع
تصویری: آموزش پارامتر های مرجع و نحوه ارسال آرایه به تابع با اشاره گر(Pointer) در سی پلاس سی پلاس 2024, دسامبر
Anonim

آرایه ها یکی از پر استفاده ترین اشکال ذخیره سازی ساختار یافته داده در برنامه های رایانه ای است. پردازش آنها را می توان با الگوریتم های مختلف پیاده سازی شده در روش ها و توابع کلاس انجام داد. بر این اساس ، اغلب لازم است که آرایه ای به یک تابع منتقل شود. زبانهای C و C ++ آزادی زیادی را در انتخاب روشهای انجام این عمل ارائه می دهند.

نحوه انتقال یک آرایه به یک تابع
نحوه انتقال یک آرایه به یک تابع

لازم است

کامپایلرهای زبانهای C و C ++

دستورالعمل ها

مرحله 1

یک آرایه با اندازه ثابت را به تابع منتقل کنید. نمونه اولیه تابع را تغییر دهید تا شامل آرگومان از نوع مناسب باشد. به عنوان مثال ، اعلام تابعی که آرایه ای از مقادیر عددی صحیح سه عنصر را به عنوان یک پارامتر در نظر می گیرد ، ممکن است به صورت زیر باشد:

void ArrayFunction (int aNumbers [3])؛

چنین تابعی با ارسال مستقیم یک آرایه به عنوان آرگومان فراخوانی می شود:

باطل SomeFunction ()

{

int aNumbers = {1 ، 2 ، 3}؛

ArrayFunction (aNumbers) ؛

}

داده های منتقل شده روی پشته کپی می شوند. اصلاح آرایه در تابع فراخوانی شده منبع را تغییر نمی دهد.

گام 2

آرایه های طول متغیر را به تابع منتقل کنید. برای این کار ، به سادگی ابعاد مربوطه را مشخص نکنید:

void ArrayFunction (int aNumbers )؛

آرایه های چند بعدی را نیز می توان به روشی مشابه عبور داد (فقط "بعد" اول می تواند متغیر باشد):

void ArrayFunction (int aNumbers [3] [2])؛

این توابع همانند مرحله اول فراخوانی می شوند.

برای اینکه بتوانید آرایه هایی با طول متغیر را به درستی پردازش کنید ، باید به طور صریح تعداد عناصر آنها را از طریق یک پارامتر اضافی منتقل کنید یا از قراردادهایی استفاده کنید که محدودیت هایی را برای مقادیر خود عناصر اعمال می کنند (یک مقدار خاص باید نشانه پایان آرایه باشد).

مرحله 3

آرایه را از نشانگر عبور دهید. آرگومان تابع باید یک اشاره گر برای یک مقدار با یک نوع مربوط به عناصر آرایه باشد. مثلا:

vide ArrayFunction (int * pNumbers)؛

دسترسی به داده ها در یک تابع می تواند هم در نت کار با عناصر آرایه و هم با استفاده از حساب آدرس انجام شود:

void ArrayFunction (int * pNumbers)

{

pNumbers [0] = 10؛ // دسترسی به عنصر 0

* (pNumbers + 1) = 20 ؛ // دسترسی به مورد 1

}

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

مزیت این روش سرعت ، اقتصاد منابع محاسباتی و انعطاف پذیری خاص است. بنابراین ، می توانید تابع هدف را با انتقال آن به یک عنصر دلخواه از آرایه ، فراخوانی کنید:

باطل SomeFunction ()

{

int aNumbers = {1 ، 2 ، 3}؛

ArrayFunction (aNumbers) ؛ // کل آرایه

ArrayFunction (& تعداد [1])؛ // شروع از عنصر دوم

}

این روش همچنین معمولاً شامل عبور تعداد عناصر موجود در یک پارامتر اضافی یا استفاده از پایان دهنده آرایه است.

مرحله 4

داده ها را به یک تابع با یک پارامتر که یک شی یا ارجاع به یک شی از کلاس است که عملکرد آرایه را پیاده می کند ، منتقل کنید. چنین کلاسها یا الگوهای کلاسی معمولاً در کتابخانه ها و چارچوبهای معروف یافت می شوند (QVector در Qt ، CArray در MFC ، std:: vector در STL و غیره).

غالباً این کلاسها یک استراتژی اشتراک داده ضمنی را با شمارش مرجع پیاده سازی می کنند ، و فقط هنگام اصلاح داده ها یک کپی عمیق انجام می دهند (کپی روی نوشتن). این به شما امکان می دهد حتی در صورت عبور اشیاray آرایه به مقدار از طریق استدلال توابع و روش ها ، مصرف منابع محاسباتی را به حداقل برسانید:

عملکرد ArrayFoid (QVector oArray)

{

int nItemCount = oArray.count ()؛

int nItem = oArray [0]؛

}

باطل SomeFunction ()

{

QVector oArray (10) ؛

برای (int i = 0؛ i

توصیه شده: