![]() |
# 1 |
חבר וותיק
|
מימוש מערך דו-מימדי ב- C++
היי,
תגידו משהו יודע איך נראה הזיכרון במערך דו-מימדי של C++? במערך רגיל הזיכרון יושב ברצף. איך זה במערך דו-מימדי? ההשערה שלי שאם נגיד: a[x][y] הוא המערך, אז גם פה הזיכרו יש בצורה רצופה שקודם a[0][0-y] ואז a[1][0-y], a[2][0-y] וכך הלאה....מה הדרך הנכונה? אני צודק? |
![]() |
![]() |
# 2 |
משתמש - היכל התהילה
|
אני לא כתבתי מעולם בC או בC++ אבל קראתי ספר על C וקראתי גם באינטרנט אז אני אנסה לחשוב בהגיון.
המשתנה של מערכים בשפות האלו הם למעשה pointer לאיזשהו מקום ששם יושבים כל התאים ברצף. מה שקורה כאן זה שיש מערך של פוינטרים כאלו שמצביעים למקומות אחרים בזיכרון ששם זה ברצף. במילים פשוטות על הזיכרון במקום מסויים ברצף יש את כל האינדקסים של ה[] הראשונים כמצביעים למקומות אחרים רציפים בזכרון שהם המערך שהם מכילים. זה מה שאני חושב, לא סגור על זה. |
![]() |
![]() |
# 3 |
חבר וותיק
|
הסיבה שאני חושב שמה שאתה אומר פחות הגיוני, זה זה שאי אפשר לכתוב פונקציה כזאת:
void func3(int vec[][]) ואם הזיכרון ממומש כפי שאתה חושב אני לא רוצה סיבה שזה יהיה בלתי אפשרי.לעומת זה הדרך שאני חושב דווקא כן מסבירה את זה. |
![]() |
![]() |
# 4 |
משתמש - היכל התהילה
|
נסה את זה:
קוד:
void func3(int **vec) |
![]() |
![]() |
# 5 |
חבר על
|
בשפת C\C++ הזכרון מופיע ברצף, כל השורה הראשונה של המערך
לאחר מכן כל השורה השניה - כך שסוף השורה הראשונה צמוד לתחילת השורה השנייה וכן הלאה לדוגמא מטריצה מסוג 3X3 עם המספרים הבאים 7 - 15 - 28 9 - 2 - 3 16 - 18 - 10 מסודר בזכרון בצורה הבאה: 28-15-7-3-2-9-10-18-16 מקווה שעזרתי..
__________________
ליאור |
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|