עבור לתוכן

שאלה פשוט בקליטת מערך ב C

Featured Replies

פורסם

ככה:

אני צריך לקלוט מהמשתמש גודל של מערך דו-מימדי (אני לא יודע מה הגודל של המערך הדו מימדי, המשתמש בוחר כרצונו)

איך אני מבצע את זה ?

:xyxthumbs:

פורסם

C זה לא low level.

הועבר לפורום המתאים.

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

אם השאלה היא איך להקצות מערך כזה באופן דינמי, אז התשובה היא: אי אפשר. אתה צריך להקצות מערך של מצביעים, ואז לכל מצביע להקצות מערך (מה שנקרא "מערך משונן"). אופציה נוספת היא "לשטח" את המערך שלך למערך חד מימדי בגודל a*b (כאשר a ו-b הם מימדי המערך המקורי).

פורסם

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

אתה אפילו לא חייב לדעת מראש מה הגדלים של המערך הדו מימדי...

אם אתה רוצה גישה נוחה לנתונים, תקצה מערך של N פויינטרים, ובכל פויינטר תקצה זיכרון ל M איברים.

ככה תוכל לגשת למקומות בצורה המוכרת לך ממערך דו מימדי A[n][m] == cell

אל תשכח לעשות free כשסיימת עם הזיכרון.

פורסם

אם השאלה היא איך להקצות מערך כזה באופן דינמי, אז התשובה היא: אי אפשר.

אין כזה דבר שאי אפשר ב C :)

זה רק טיפה מסובך.

אם עושים את החשבון מגלים שאפשר, ושזה גם יעיל.

פורסם
  • מחבר

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

אתה אפילו לא חייב לדעת מראש מה הגדלים של המערך הדו מימדי...

אם אתה רוצה גישה נוחה לנתונים, תקצה מערך של N פויינטרים, ובכל פויינטר תקצה זיכרון ל M איברים.

ככה תוכל לגשת למקומות בצורה המוכרת לך ממערך דו מימדי A[n][m] == cell

אל תשכח לעשות free כשסיימת עם הזיכרון.

ועכשיו בעברית? (אין לי יותר מידיי רקע בנושא כן? ) :)

פורסם

פויינטרים אני מניח שאתה מכיר.

האם אתה יודע כיצד מקצים זיכרון לעצמך ? למשל עבור מערך חד-מימדי ?

אם לא, קרא על הפקודה malloc.

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

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

הנה קוד שתוכל להתרשם ממנו - http://pleasemakeanote.blogspot.com/2008/06/2d-arrays-in-c-using-malloc.html

פורסם
  • מחבר

תודה עוד אחד!

האמת שאת החומר הזה עוד לא למדתי כך שכל זה עדיין חדש לי

אבל טוב להחכים קצת לפני שנלמד את זה.

תודה!

פורסם

אין כזה דבר שאי אפשר ב C :)

זה רק טיפה מסובך.

אם עושים את החשבון מגלים שאפשר, ושזה גם יעיל.

התכוונתי שאי אפשר בפקודה אחת, כמו שעושים הקצאה סטטית.

פורסם

אה, חשבתי שדיברת על הגודל.. 8)

ארכיון

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

דיונים חדשים