לגבי מערכים ב C

avichaid

New member
לגבי מערכים ב C

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

void initboard(char* chessb){
char chess[][8] = {'r','n','b','q','k','b','n','r',
'p','p','p','p','p','p','p','p',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',
'P','P','P','P','P','P','P','P',
'R','N','B','Q','K','B','N','R'};
char* temp=(char*)chess;
while((temp-(char*)chess)}

אני מתייחס לשורה הזו כרגע:
char chess[][8]
השאלה שלי היא למה הוא בחר להגדיר את המערך רק עם ערך(8) בסוגריים השניים? (מדובר במישהו שיודע מה הוא עושה)

מתי עושים כך?
מתי עושים אותו דבר אך בלי שום ערך? [][]
מתי עושים עם ערכים בשניהם [8][8] ?
 
העימוד נורא

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

avichaid

New member
מתנצל על העימוד..
הודעה ראשונה שלי כאן

אז בעצם זה נכון יותר תמיד כשיש מערך דו מימדי מאוזן (כמו 8 על 8 או 5 על 5))- להכניס ערך רק בסוגריים השניים?
בעצם חוץ מהתשובה "זה תקין" יש משהו מעבר לזה? לכתוב דווקא כך?
 
זה עוזר

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

avichaid

New member
תודה! ומה לגבי מקרה הפוך?

למשל -
char chess[8][]
יש כזה דבר בכלל? מה ההבדל ומתי להשתמש כך?
 
איני זוכר

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

BravoMan

Active member
הגדרה כזו אינה חוקית ולא תתקמפל.

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