נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: שגיאה בהעברת מערך דו מימדי לפונקציה (C)

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 November 2007 בשעה 20:39 | IP רשוּם
ציטוט אורח

הprototype של הפונקציה הוא:
קוד:
void printArray(char **arr)

ככה הגדרתי את המערך:
קוד:
char arr[10][10];

עכשיו המערך כן מאותחל והכול אבל כשאני מנסה לשלוח אותו לפונקציה ככה:
קוד:
printArray(arr);


זה מראה לי את השגיאה הבאה:
קוד:
error C2664: 'printArray' : cannot convert parameter 1 from 'char' [10][10]' to 'char **'
printArray(arr);

חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 09 November 2007 בשעה 21:52 | IP רשוּם
ציטוט shoshan

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

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 10 November 2007 בשעה 01:15 | IP רשוּם
ציטוט אורח

מצביע לאיבר הראשון ?
printArray(&arr[0][0]);

זה נותן את הכותבת של האיבר הראשון וזה לא עובד...
error C2664: 'printArray' : cannot convert parameter 1 from 'char *' to 'char **'
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 10 November 2007 בשעה 09:43 | IP רשוּם
ציטוט inHaze

לדעתי אתה לא צריך פוינטר לפוינטר (**), תנסה במקום ** לרשום רק *.

__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 10 November 2007 בשעה 10:15 | IP רשוּם
ציטוט אורח

מצביע לא יעזור לי במקרה הזה, עוד מישהו ?
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 10 November 2007 בשעה 10:52 | IP רשוּם
ציטוט inHaze

מצביע כן יכול לעזור כי המערך (גם דו מימדי) נשמר באופן רציף בזיכרון :                     a[0][0]...a[1][0].... וכך הלאה לכן אתה יכול לגשת לכל מקופ במערך אם אתה עושה חישוב קליל , אבל אפשר גם כך למשל:
]CODE]

#include <stdio.h>

#define len 10

void bla( char [][len] );

void main()

{

char arr[len][len];

bla( arr );

}

void bla( char arr[][len] )

{

arr[0][1] = 5;

}

[/CODE]



__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 10 November 2007 בשעה 10:56 | IP רשוּם
ציטוט אורח

יש אופציה ללא הגדרת משתנים גלובאלים ? כי זה תיכנות גרוע פשוט..
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 10 November 2007 בשעה 10:58 | IP רשוּם
ציטוט inHaze

אתה לא חייב להגדיר משתנה גלובלי, אתה יכול פשוט לרשום את הגודל כמו שעשית בהתחלה



__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 10 November 2007 בשעה 11:57 | IP רשוּם
ציטוט אורח

אבל זה לא עבד יש לי שגיאה
אפשר עזרה?!?!
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 11 November 2007 בשעה 11:42 | IP רשוּם
ציטוט shoshan

לא צריך להספים בגלל שלא הבנת את התשובה.

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

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

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

אוקיי ?

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

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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