עבור לתוכן

error בקימפול.

Featured Replies

פורסם

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

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

מוגדר לי בתחילת התוכנית הראשית מערך int a[9][9][11] I (לא להתייחס ל I זה בגלל בעיות כתיבה).

שלחתי בתוכנית הראשית את הערך בפונקצייה כך function(a) I ובפונקצייה עצמה הצהרתי כך void function(int ***a) I.

רק אם אני מגדיר את המשתנים מצהיר עליהם כ a*** אין בעיה אבל הרי השם מערך בC הוא ההמצביע לאיבר הראשון במערך וכאן מדובר במערך תלת מימדי ולכן לכאורה זה צריך להיות ***a/

בתודה מראש.

פורסם

void function(int ***a

)

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

פורסם

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

במערך תלת מימדי אין שום משמעות ל-

a[i]

אלא רק ל-

a[i][j][k]

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

אם אתה רוצה להעביר את המערך כמערך חד-מימדי, אתה יכול להעביר את

&a[0][0][0]

פורסם

במקרה שהוא מעביר את המערך כחד-מימדי, הוא יצטרך כמובן להגדיר את הפונקציה שתקבל רק int* ולא int***.

ארכיון

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

דיונים חדשים