21-12-2005, 10:43
|
|
|
|
חבר מתאריך: 04.08.02
הודעות: 4,468
|
|
...
שאלות טובות - חבל שהשלישית עונה על כולן.
נניח יש לך מערך דו-מימדי: 3x4.
int matrix[3][4]
אתה יכול בעצם לתאר את המערך הדו-מימדי הנ"ל בעזרת 3 מערכים חד-מימדייםצ שאורך כל אחד מהם הוא 4 איברים מסוג שלם.
בעצם, כשאתה נגש למשל לאיבר matrix[2][2] אתה בעצם מורה למהדר:
"תלך "למערך" השלישי, ובמערך הזה תגש לאיבר השלישי שלו"
או בדרך יותר כללית - והנה הנוסחא שבקשת:
*( *(matrix+k) + n )
k - "מספר המערך" (העמודות)
n - "מספר האיבר" (השורות)
יש צורות נוספות שהן בעצם זהות...
*(matrix[2] + 2 )
(*(matrix + 2)[2] )
עכשיו לשאלה, למה דווקא
int function( int matrix[][4] )
הפונקציה מקבלת כפרמטר מערך דו-מימדי, נניח שלא היינו כותבים את אורך השורה, כיצד הקומפיילר היה מפענח את הפעולה הבא:
matrix[1][3] = 4;
כפי שראינו הקומפיילר מבין זאת כך שיש להוסיף לכתובת הראשונה אורך של שורה אחת + 3 איברים בתוך השורה, אולם אם אורך השורה אינו ידוע, כיצד הוא ידע על כמה לדלג?
_____________________________________
C pogrammers never die. They are just cast into void.
|