כיצד להעביר מערך לפונקציה

תוכן עניינים:

כיצד להעביר מערך לפונקציה
כיצד להעביר מערך לפונקציה

וִידֵאוֹ: כיצד להעביר מערך לפונקציה

וִידֵאוֹ: כיצד להעביר מערך לפונקציה
וִידֵאוֹ: C Program To Shift Elements of An Array by n Position 2024, דֵצֶמבֶּר
Anonim

מערכים הם אחת הצורות הנפוצות ביותר לאחסון נתונים מובנה בתוכנות מחשב. העיבוד שלהם יכול להיעשות על ידי אלגוריתמים שונים המיושמים בשיטות בכיתה ובפונקציות. בהתאם, לעתים קרובות נדרש להעביר מערך לפונקציה. שפות C ו- C ++ מציעות חופש רב בבחירת השיטות לביצוע פעולה זו.

כיצד להעביר מערך לפונקציה
כיצד להעביר מערך לפונקציה

זה הכרחי

מהדרים של שפות C ו- C ++

הוראות

שלב 1

העבירו מערך בגודל קבוע לפונקציה. שנה את אב הטיפוס של הפונקציה כך שיכיל טיעון מהסוג המתאים. לדוגמה, ההצהרה על פונקציה שלוקחת מערך של ערכים מספריים שלמים של שלושה אלמנטים כפרמטר עשויה להיראות כך:

בטל ArrayFunction (int aNumbers [3]);

פונקציה כזו נקראת על ידי העברת מערך ישירות אליה כארגומנט:

בטל SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

הנתונים שהועברו מועתקים אל הערימה. שינוי המערך בפונקציה הנקראת אינו משנה את המקור.

שלב 2

העבירו מערכי אורך משתנים לפונקציה. לשם כך, פשוט אל תציין את ממד הארגומנט המתאים:

בטל ArrayFunction (int aNumbers );

ניתן להעביר מערכים רב ממדיים בצורה דומה (רק ה"ממד "הראשון יכול להיות משתנה):

בטל ArrayFunction (int מספרים [3] [2]);

פונקציות אלה נקראות באותו אופן כמו בשלב הראשון.

כדי להיות מסוגל לעבד נכון מערכים באורך משתנה בפונקציה, עליך להעביר במפורש את מספר האלמנטים שלהם באמצעות פרמטר נוסף, או להשתמש במוסכמות המטילות מגבלות על ערכי האלמנטים עצמם (ערך מסוים חייב להיות סימן לסוף המערך).

שלב 3

העבר את המערך לפי מצביע. על ארגומנט הפונקציה להיות מצביע לערך עם סוג המתאים לאלמנטים של המערך. לדוגמה:

בטל ArrayFunction (int * pNumbers);

גישה לנתונים בפונקציה יכולה להתבצע הן בסימון לעבודה עם אלמנטים של מערך והן באמצעות חשבון כתובת:

בטל ArrayFunction (int * pNumbers)

{

מספרים [0] = 10; // גישה לאלמנט 0

* (מספרים + 1) = 20; // גישה לפריט 1

}

הזהר! מכיוון שהפונקציה מועברת לא עותק של הנתונים, אלא מצביע אליהם, המערך המקורי ישונה.

היתרון בשיטה זו הוא מהירות, חסכון במשאבי חישוב וגמישות מסוימת. אז אתה יכול לקרוא לפונקציית היעד על ידי העברת מצביע לרכיב שרירותי של המערך:

בטל SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // מערך שלם

ArrayFunction (& aNumbers [1]); // החל מהאלמנט השני

}

שיטה זו כוללת לרוב גם העברת מספר האלמנטים הזמינים בפרמטר נוסף או שימוש במסוף מערך.

שלב 4

העבירו נתונים לפונקציה עם פרמטר שהוא אובייקט או הפניה לאובייקט מהמחלקה המיישם את פונקציונליות המערך. שיעורים או תבניות כיתות כאלה נמצאים בדרך כלל בספריות ובמסגרות פופולריות (QVector ב- Qt, CArray ב- MFC, std:: vector ב STL וכו ').

לעתים קרובות מחלקות אלה מיישמות אסטרטגיה משותפת של נתונים משתמעת עם ספירת הפניות, ומבצעת עותק עמוק רק כאשר הנתונים משוננים (העתק בכתיבה). זה מאפשר לך למזער את צריכת משאבי החישוב גם במקרה של העברת אובייקטים של מערך לפי ערך באמצעות ארגומנטים של פונקציות ושיטות:

בטל ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

בטל SomeFunction ()

{

QVector oArray (10);

עבור (int i = 0; i

מוּמלָץ: