הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   מימוש מערך דו-מימדי ב- C++ (https://hosts.co.il/forums/showthread.php?t=83099)

Vitalist 11-06-10 23:45

מימוש מערך דו-מימדי ב- C++
 
היי,
תגידו משהו יודע איך נראה הזיכרון במערך דו-מימדי של C++?

במערך רגיל הזיכרון יושב ברצף.
איך זה במערך דו-מימדי?
ההשערה שלי שאם נגיד:
a[x][y]
הוא המערך, אז גם פה הזיכרו יש בצורה רצופה שקודם
a[0][0-y]
ואז
a[1][0-y], a[2][0-y]
וכך הלאה....
מה הדרך הנכונה? אני צודק?

Shay Ben Moshe 11-06-10 23:57

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

זה מה שאני חושב, לא סגור על זה.

Vitalist 12-06-10 00:33

הסיבה שאני חושב שמה שאתה אומר פחות הגיוני, זה זה שאי אפשר לכתוב פונקציה כזאת:
void func3(int vec[][])
ואם הזיכרון ממומש כפי שאתה חושב אני לא רוצה סיבה שזה יהיה בלתי אפשרי.
לעומת זה הדרך שאני חושב דווקא כן מסבירה את זה.

Shay Ben Moshe 12-06-10 00:47

נסה את זה:
קוד:

void func3(int **vec)
אני מזכיר, אני לא מתכנת C/C++

liorclub 12-06-10 01:22

בשפת C\C++ הזכרון מופיע ברצף, כל השורה הראשונה של המערך
לאחר מכן כל השורה השניה - כך שסוף השורה הראשונה צמוד לתחילת השורה השנייה וכן הלאה
לדוגמא
מטריצה מסוג 3X3 עם המספרים הבאים
7 - 15 - 28
9 - 2 - 3
16 - 18 - 10
מסודר בזכרון בצורה הבאה:
28-15-7-3-2-9-10-18-16

מקווה שעזרתי..


כל הזמנים הם GMT +2. הזמן כעת הוא 09:40.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ