מישהו מוכן בבקשה להסביר מדוע אני מקבל שגיאה כזאת?(מצ"ב תמונה

מישהו מוכן בבקשה להסביר מדוע אני מקבל שגיאה כזאת?(מצ"ב תמונה

את הפונקציה שעושה לי בעיות הגדרתי כך (ונא לשים לב ל-SIZE למעלה):
קוד:
# define SIZE 3
void printMatrix(int** mat ,int rows, int cols) //printing the matrix//
{
    int i, j;

   printf("matrix[%d][%d]\n",rows,cols);    
   for(i=0;i<rows;i++)
   {
      for(j=0;j<cols;j++)
      printf("%8d ",mat[i][j]);
      printf("\n");
   }


 

BravoMan

Active member
כי אתה מעביר לפונקציה פרמטר מסוג שונה ממה שהיא

מצפה לו.
&nbsp
הפונקציה printMatrix מצפה למצביע למצביע.
&nbsp
ואתה מעביר לה מצביע ל-int.
 
אז איך אפשר לתקן את זה?

אני רוצה שפונקציית ההדפסה הנ"ל תאפשר גם להדפיס מטריצה סטטית, וגם מטריצה דינמית.
 

BravoMan

Active member
זו פונקציה שאתה כתבת?

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

BravoMan

Active member
איך אתה לומד?

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