פורסם 2005 בנובמבר 320 שנים סיימתי לבנות תוכנה מסויימת כמה מאות שורות העתקתי אותה למחשב ובקימפול של התוכנית אפשר לומר שלא היו טעויות פרט לטעות אחת שחזרה על עצמה כ20 פעמים....הטעות הזאת היא דווקא בנושא שדנתי בו בפורום והוא שליחת מערך לפונקצייה. והטעות הוא זה שהוא אומר שאין התאמה בין הערך שאני שולח לפונקצייה לבין הערך שהפונקצייה מקבלת.מוגדר לי בתחילת התוכנית הראשית מערך int a[9][9][11] I (לא להתייחס ל I זה בגלל בעיות כתיבה).שלחתי בתוכנית הראשית את הערך בפונקצייה כך function(a) I ובפונקצייה עצמה הצהרתי כך void function(int ***a) I.רק אם אני מגדיר את המשתנים מצהיר עליהם כ a*** אין בעיה אבל הרי השם מערך בC הוא ההמצביע לאיבר הראשון במערך וכאן מדובר במערך תלת מימדי ולכן לכאורה זה צריך להיות ***a/בתודה מראש.
פורסם 2005 בנובמבר 320 שנים void function(int ***a)אז אתה מעביר פה פוניטר לפוינטר לפוינטר, זה לא ממש מערך תלת-מימדי... (גם לא לכאורה)... תגדיר את זה בפונקציה כמו שהגדרת את זה בחוץ. (או למשל תעביר מערך חד-מימדי).
פורסם 2005 בנובמבר 320 שנים אמנם שם של מערך זה מצביע לתחילת המערך, אבל זה שונה מאוד ממערך של מצביעים שכל אחד מצביע למערך של מצביעים שכל אחד מצביע על מערך של איברים.במערך תלת מימדי אין שום משמעות ל- a[i]אלא רק ל-a[i][j][k] אם אתה רוצה להעביר מערך רב-מימדי (בתור מערך ולא בתור בלוק זיכרון) אתה צריך שהפוקנציה תוגדר לקחת מערך שבו לכל היותר האינדקס הראשון הוא ריק.אם אתה רוצה להעביר את המערך כמערך חד-מימדי, אתה יכול להעביר את &a[0][0][0]
פורסם 2005 בנובמבר 320 שנים במקרה שהוא מעביר את המערך כחד-מימדי, הוא יצטרך כמובן להגדיר את הפונקציה שתקבל רק int* ולא int***.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.