מטריצות ב-C

NightFears

New member
מטריצות ב-C

אני מבקש להתייחס לתענה הבאה: מטריצה ב-C בעצם בנוייה בזכרון בצורה הבאה(ל 3x3):
[0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [2][0] [2][1] [2][2]​
האם זה נכון? אם לא, אז כיצד היא נראת באמת? ואם כן, הנה השאלה הבאה: האם ניתן לעבוד איתה כאם מערך חד-מימדי? איך בדיוק? תודה מראש.
 

NightFears

New member
אדייק

אם יש פונקציה הבאה:
void func(char one_dim[10]){ ... }​
האם ניתן להעביר לה איכשהו מערך דו-מימדי? שאלה קשורה שלא חשבתי להעלות במודעה הקודמת היא: מהו בעצם שם של מערך ב-C? מצביע? reference? ומה קורא כשאני מעביר אותו בתור פרמטר? אולי(לא באמת ;) אני מקבל עותק של המערך המקורי בפריים הלוקלי? או, כפי שנראה לי מתוך הגיון, זה עובד באנלוגיה להעברת מצביע? תודה שוב.
 

ke

New member
מטריצות

קשר לשאלה הראשונה על דרך האחסון היא a[0][0] a[0][1][ a[0][2][ a[0][3][ a[1][2] and so on תסתכל על הקוד הבא שמדגים את זה
#include <stdio.h> int main() { int i,j,c=0; int *p; int a[3][4]; for (i = 0 ; i < 3 ; i++) { for( j = 0 ; j < 4 ; j++) { a[j] = c; c++; } } p = &a[0][0]; for (i = 0 ; i < 12 ; i++) { printf("%d ",*(p++)); } printf("\n"); return 0; }

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