עבור לתוכן

C - מצביע לעמודה של מערך תלת מימדי

Featured Replies

פורסם

שלום כולם,

אני רוצה להדפיס את המערך הדו מימדי שלי עם שימוש במצביעים (שפת C).

אך נראה שאני רק מצליח להצביע על מיקום באותה שורה וכל התקדמות שלי רק מצביע על התקדמות בתוך השורה...

אני רוצה סה"כ להצביע כל פעם על איבר ה-0 בכל אחת מהשורות כשאני מקדם אותו ב-1.

מישהו יודע איך לממש זאת?

פורסם

אין כזה דבר (ליתר דיוק, לא בצורה פשוטה).

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

הפתרון הפשוט הוא לא לקדם את המצביע ב-1, אלא בגודל השורה. אם לדוגמה זה היה מערך דו-מימדי בגודל n על m, אז במקום להוסיף 1 למצביע, צריך להוסיף n.

פורסם
  • מחבר

תודה על ההערה. אכן זה מקדם אותי, אבל הבעיה שאותו n תפס לי כמה וכמה שורות... (בפועל 4)

למשל (כתבתי עכשיו, אז אולי יש איזה שגיאה):

char array[100][20] = {"string1","string2",...,"string20"};
char *p = (char*)array;

int i;
for(i = 0; i < 20; i++)
{
printf("%s", p);
p += 100;
}

יכול להיות שאני צריך להשתמש איכשהו בפונקציה sizeof (חילקתי את ה-100 בגודל של array& ואז זה עבד)

פורסם

תחשוב על טבלה גדולה ואז אתה "מדביק" כל שורה לסוף של השורה הראשונה כך שיוצא לך מערך חד מימדי ארוך.

ככה זה מיוצג בזיכרון. עכשיו תבנה מערך דו מימדי שכזה קטן (נגיד 3X3) ותנסה להדפיס את כל המספרים מ-0 עד 9 כערכים במערך.

תשחק עם זה ותבין מה החוקיות.

פורסם
  • מחבר

אני מבין שהמערך הדו מימדי באמת שורה אחת בזיכרון... פשוט אני לא מצליח לעבור לשורה הבאה בצורה נכונה.

ברגע שאני משנה את הגודל מ-20 (בדוגמה) למשהו אחר כמו 30, אז החלוקה של size of כבר לא נכונה...

פורסם

ה-sizeof של char זה 1. איפה אתה מסתבך?

array[n][m] = array[sizeof(char) * (n*numOfRows + m)]

כאשר שים לב כי פוינטר מסוג X יבצע את (...)*(sizeof(X אוטומטית. במקרה של char, זה כמובן לא בעייתי (כי זה 1 כאמור)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים