עבור לתוכן

עזרה עם פוינטרים בC

Featured Replies

פורסם

אחרי C# וJAVA איך אפשר לחזור לגועל נפש הזה :s07::pissed:

בקיצור יש לי מערך תלת מימדי ואני ליצור מצביע אליו משהו בסיגנון:

void InitBlocks(){
GLbyte piece1[N][N][N]={{0,1,0,
0,1,0,
0,1,0},
{0,1,0,
0,0,0,
0,0,0},
{0,0,0,
0,0,0,
0,0,0}};
GLbyte p[N][N][N];

%8%8 p[0]=&piece1[0];

//BlocksArray[0].Cubes=piece1;

}

השורה שמסומנת ב%8%8 לא עובדת ... מה עושים ?

פורסם
GLbyte *p;

p = &(piece1[0][0][0]);

פורסם
  • מחבר

תודה, למה השורה p[0][0][0] לא עובדת לי אחרי התיקון הזה ?

פורסם

מה הכוונה לא עובדת? מה השגיאה שאתה מקבל, ומה רשום בשורה שקיבלת עבורה את השגיאה?

פורסם
  • מחבר

זה השגיאה:

C:\Documents and Settings\Haim Levy\Desktop\Tetris3D\main.cpp(768) : error C2109: subscript requires array or pointer type
C:\Documents and Settings\Haim Levy\Desktop\Tetris3D\main.cpp(768) : error C2109: subscript requires array or pointer type
C:\Documents and Settings\Haim Levy\Desktop\Tetris3D\main.cpp(768) : error C2106: '=' : left operand must be l-value

וזה מה שכתבתי:

p[0][0][0]=2;

פורסם

אתה הגדרת את המערך לא נכון מההתחלה

זה מה שעשית מערך של מערכים עם 9 תאים


GLbyte piece1[N][N][N]={
{0,1,0, 0,1,0,0,1,0}
,{0,1,0,0,0,0,0,0,0}
,{0,0,0,0,0,0,0,0,0}
};

וככה זה צריך להיות:


GLbyte piece1[N][N][N]={
{
{0,1,0}
,{0,1,0}
,{0,1,0}
}
,{
{0,1,0}
,{0,0,0}
,{0,0,0}
}
,{
{0,0,0}
,{0,0,0}
,{0,0,0}
}
};

פורסם
  • מחבר

זה אותו דבר(ניסיתי) ובכול מיקרה הבעייה לא שם :-\

פורסם

מערך כזה:

char P[N][N][N];

הוא מערך סטטי בגודל קבוע, ולא מצביע.

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

אתה יכול "להמיר" מערך למצביע, אבל מה שאתה מנסה (או חושב שאתה מנסה) זה להפוך מצביע למערך.

דבר ראשון, תשתמש ב-typedef-ים.

דבר שני, P צריך להיות מצביע למערך.


typedef GLbyte GLBArray3D[N][N][N];

GLBArray3D piece1 = { /*... */ };

void f()
{
GLBArray3D *p;

p = &piece1;
}

וכמובן, תתקן את האתחול של piece1 כמו שאמרו כאן.

פורסם
  • מחבר

עובד, תודה.

ארכיון

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

דיונים חדשים