ABA


"|C| איך ניתן להחזיר מפונקציה מערך דו-מימדי?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #14474 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14474
idan192

   08:04   05.12.07   
אל הפורום  
  |C| איך ניתן להחזיר מפונקציה מערך דו-מימדי?  
 
   ערכתי לאחרונה בתאריך 05.12.07 בשעה 16:27 בברכה, idan192
 
השתמשתי ב-strtok על-מנת לחלק קובץ מה-FILE *in שלי למקטעים המופרדים לפי רווח ושיבצתי כל שורה (בכל קריאה לפונקציה) למערך דו-מימדי [test[MAX_LEN][MAX_LEN, כאשר החלק הראשון זה מספר מילה בשורה והשני זה מספר תו של כל מילה במערך.
אני מבצע את כל הפעולות הללו ומעוניין להחזיר אותן ל-main.
הפונקציה שלי, slicer, היא מסוג *char ולא [char func[MAX_LEN][MAX_LEN, אז איך אני אוכל להחזיר מערך מסוג זה?
חשבתי על פויינטר לפויינטר אבל ברגע שאני יוצא מהפונקציה כל האינפורמציה כמובן נמחקת מה-STACK.
מה שגם - אסור לי להשתמש בכלל במשתנים גלובאליים.


אשמח לתשובה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  בעיקרון מערך הוא מצביע בפני עצמו Limp Bizkit 05.12.07 10:40 1
  תקצה דינאמית את המערך ואז תחזיר מצביע למצביע Net_Boy  05.12.07 15:18 2
  כן, הסתדרתי בסוף. שכחתי שמערך הוא בעצם מצביע לזכרון idan192 05.12.07 16:28 3

       
Limp Bizkit
חבר מתאריך 2.9.02
3436 הודעות
   10:40   05.12.07   
אל הפורום  
  1. בעיקרון מערך הוא מצביע בפני עצמו  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 05.12.07 בשעה 10:46 בברכה, Limp Bizkit
 
כאשר אנחנו מגדירים מערך [test[MAX_LEN][MAX_LEN כמו שעשית, test בעצם משמש כמצביע לכל דבר, שבאמצעות ה-index אנחנו ניגשים לאיברים השונים בזכרון

מערך הוא לא משתנה ספציפי שאפשר להחזיר אותו מפונקציה מסויימת, כמו int ו-float לדוגמא, אלא רק מצביע לאחד מהאיברים שלו (בגלל שמערך בבסיסו הוא מצביע!)


אז השיטה להחזיר מערך דו מימדי מפונקציה היא פשוט להחזיר את המצביע למערך (test), ואז לבצע את המניפולציות הדרושות על המצביע המוחזר


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

Ask any racer, any real racer. It doesn't matter if you win by an inch or a mile; winning's
winning.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   15:18   05.12.07   
אל הפורום  
  2. תקצה דינאמית את המערך ואז תחזיר מצביע למצביע  
בתגובה להודעה מספר 0
 
   רק בסיום תזכור לשחרר את המקום שהקצת

ותשנה את הכותרת שלך ל C , כי אין פה שום מילה שקשורה ל C++


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
idan192

   16:28   05.12.07   
אל הפורום  
  3. כן, הסתדרתי בסוף. שכחתי שמערך הוא בעצם מצביע לזכרון  
בתגובה להודעה מספר 0
 
   הקבועים. פשוט מאוד איפסתי בפונקציה מיין מערך והפנתי אותו לפונקציה slicer שלי ושם הוא ביצע לי את כל הדברים על ה-test המקורי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net