פורסם 2011 בדצמבר 1713 שנים יש לי פונקציה שצריכה לקבל מצביע למערך דו מימדיהבעיה היא שאני לא מבין איך לשלוח מצביע כזהvoid PaintPoint (char **arr, int nCol, int nRow, char cChar){ *(*(arr + nRow) + nCol) = cChar;}void main(void){ char arr[8][8] = {0}; PaintPoint(&arr, 4, 4, 'X');}ניסיתי כל מני אפשרויות (וגם את גוגל), ואני פשוט לא מצליח להעביר מצביע למערך
פורסם 2011 בדצמבר 1713 שנים מחבר ניסיתי את זה, עדיין יש שגיאהIntelliSense: argument of type "char (*)[8]" is incompatible with parameter of type "char **" zz
פורסם 2011 בדצמבר 1713 שנים מוזר, אין לי מושג למה זה לא עובד. אבל אם אתה מקצה את המערך בצורה הזאת: char** arr = (char**)malloc(8*sizeof(char*)); for(i=0;i<8;++i) arr[i] = (char*)malloc(8*sizeof(char));זה יעבוד.
פורסם 2011 בדצמבר 1713 שנים זה כי **char ו-[8][8]char הם לא אותו טיפוס (בניגוד ל-*char ו-[]char שהם כן אותו טיפוס... בערך).**char הוא מצביע למצביע, ששקול למערך של מצביעים. אם כל אחד מהמצביעים האלה מצביע גם כן למערך, אז אנחנו מקבלים מערך דו מימדי. שים לב שאין כאן שום דרישה שהמערכים האלה ישבו באופן רציף אחד אחרי השני בזכרון - כל אחד יכול לשבת במקום אחר.[8][8]char הוא לעומת זאת מערך דו מימדי, בגודל 8 על 8. המערך יושב במקום רצוף בזכרון, ולמעשה הקומפיילר מתרגם אותו מאחורי הקלעים למערך חד מימדי בגודל 64.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.