c - איך שולחים מערך דו ממדי לפונקציה? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

c - איך שולחים מערך דו ממדי לפונקציה?


yk1

Recommended Posts

איך שולחים את המערך הדו-ממדי 'mat' לפונקציה checkMat?

(כמו שזה עכשיו זה לא פועל)

#include<stdio.h>
int checkMat(int **mat, int rows);


void main(){
int mat[][3]= {{1,2,3},{1,3,4},{4,2,1}};
printf("%d", checkMat(mat, 3));
}


int checkMat(int **mat, int rows){


int i, first=0 , second=0;


for(i=0; i<rows; i++){
first= first+mat[i][i];
second= second+ mat[rows-1-i][i];
}
if(first==second)return 1;
return 0;
}

קישור לתוכן
שתף באתרים אחרים

אתה צריך להעביר אותו כמו שאתה מגדיר אותו, דהיינו:

int checkMat(int mat[][3], int rows);

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

צריך לזכור ש-**int זה לא "מערך דו מימדי" - זה סה"כ מצביע למצביע. אפשר להשתמש בזה על מנת לבנות מערך דו מימדי בגודל שאינו ידוע מראש (באמצעות malloc כמובן). יש למעשה שתי דרכים לעשות את זה:

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

int **p = (int**)malloc(sizeof(int*) * rows);
for (i = 0 ; i < rows ; i++) {
p[i] = (int*)malloc(sizeof(int) * cols];
}

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

2. לדמות מערך דו מימדי באמצעות מערך חד מימדי. על מנת ליצור מערך עם m שורות ו-n עמודות יוצרים מערך חד מימדי בגודל m*n ואז בשביל לגשת לתא i,j ניגשים לאינדקס i*n+j. היתרון של השיטה הזו הוא שככה המערך יושב בבלוק רציף בזכרון, ואתה מקצה ומשחרר את כולו במכה אחת.

קישור לתוכן
שתף באתרים אחרים

אוקי,

אבל זו לא הייתה השאלה.

נתונה לי הפונקציה שרשמתי, ואליה אני צריכה לשלוח את את המטריצה (שגם אותה רשמתי ;) ).

מה אני צריכה להוסיף לmain כדי שאוכל לשלוח את המטריצה לפונקציה?

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...