11-11-2006, 02:04
|
|
|
|
חבר מתאריך: 15.08.06
הודעות: 465
|
|
אם אתה שואל את זה, מראש אני אניח שהמערך סטטי,
אז לא, אתה לא חייב להשתמש במצביעים.
מבחינת הפונקציה שמקבלת את המערך, כן, היא מקבלת את הכתובת של התא הראשון (ולכן כשאתה מקבל מערך כארגיומנט אתה לא יוצר בלוק זיכרון חדש, אלא מתעסק עם אותו מערך דהיינו אותה הכתובת).
כשאתה פונה אל a[i] המהדר מתייחס אל זה כ (*(a+i))
או, לשם העניין נניח במערך N מימדי,
קוד:
a[b_1][b_2]...[b_N] equivalents to (*(*(*(...*(Arr+b_1))+b_2)+...)+b_N)
נניח, לדוגמא, הפונקציה הזאת תקבל מערך חד מימדי ותאפס את כל האיברים במקומות הזוגיים, המעבר על המערך יהיה ריקורסיבי
קוד PHP:
int ChangeArr(int arr[], int n){ if (n<0) return 0; else if (n%2) arr[n]=0; return ChangeArr(arr, n-1); }
אבל הפונקציה מחזירה 0, ותכלס תוכל פשוט להגדיר מערך גלובאלי במקום לקבל אותו כארגיומנט, אותו דבר.
לעומת זאת אם אתה רוצה שהפונקציה לא רק תשנה מערך אלא גם תחזיר את המערך השונה, או שאתה רוצה לעבוד עם מערך דינאמי של יותר ממימד אחד, תצטרך לקבל ולהחזיר מצביעים כנ"ל
_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature
נערך לאחרונה ע"י ם_O בתאריך 11-11-2006 בשעה 18:15.
|