מערכים בc

dedtheded

New member
מערכים בc

לכל אנשי הפורום שלום. שמעתי פעם שאפשר להגדיר מערך כמצביע... והבנתי שגם p** הוא מערך דו מימדי. מהי הסיבה לזה? והאם ניתן להגדיר כך מערכים דינמיים? אם לא , אז איך ניתן? בר.
 
תשובה

אם הבנתי את השאלה לך, אז כן - אפשר וצריך להגדיר כך מערכים דינמיים (דינמיים במובן של "לא מוקצים בגודל שנקבע בזמן קומפילציה"). לא ברור מהשאלה שלך אם אתה מחפש דוגמאות ב-C או C++, אז הנחתי שמדובר ב-C. דוגמה:
int* MyArray; int i; MyArray = (int*)malloc(10 * sizeof(int)); for (i = 0; i < 10; ++i) printf(MyArray);

זה יגדיר מערך חד מימדי ל-10 איברים מסוג INT, ויתן לך את היכולת להשתמש בו בעזרת ה-SYNTAX הסטנדרטי של C הקיים כדי לפנות לאיברי המערך (בעזרת סוגריים מרובעים המכילים אינדקס, וכו'). דוגמה למערך דו מימדי:
int** MyArray; int i,j; MyArray = (int**)malloc(5 * sizeof(int*)); for (i = 0; i < 5; ++i) MyArray = (int*)malloc(10 * sizeof(int)); for (i = 0; i < 5; ++i) for (j = 0; j < 10; ++j) printf(MyArray[j]);

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

כמובן שהשימוש ב-PRINTF לא נכון כצורה שציינתי אותו, אבל הבנת את העיקרון.
 

debillyg

New member
מאוד לא מומלץ

הקוד שאתה מתאר כאן יעבוד אבל זה תכנות רע.. בניגוד ל JAVA ב C לא מומלץ להגדיר כך מערכים פשוט מפני שהמשתמש לא ידע האם ההקצאה של הזכרון היתה דינמית או סטטית דבר שכנראה יגרום לדליפות זכרון בקוד אמיתי. ב JAVA אין בעיות כאלו בגלל ה נקוי האוטומטי של זכרון מוקצא. השימוש ב P** טוב בעיקר בשימוש כפרמטר לפונקציה
 
למעלה