שליחת struct לפונקציה (C) - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שליחת struct לפונקציה (C)


Jaman

Recommended Posts

הגדרתי:

typedef struct{
int x;
int y;
}coord;

והפונקציה:

void DrawLine(SDL_Surface* screen, coord p1, coord p2)

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

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

לדוגמה האם אני יכול לעשות:

DrawLine(screen, [x1, y1], [x2, y2])

או משהו בסגנון?

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

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

אם הבנתי נכון מה שכתבת פה אז אני התכוונתי לההפך.

תעבור ל-C++. שם אתה יכול לעשות את זה (כל עוד הגדרת constructor מתאים).

אני גם ככה עובד עם Visual C++, אז למה לא.. אתה יכול לתת לי דוגמה לאיך לעשות את זה (לצורך העניין אתה יכול להשתמש במה שכתבתי בהודעה הראשונה)?

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

אתה מתכוון:

x = xx;
y = yy;

לא?

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

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

1- בסוף הבלוק המשתנה מושמד כמו בסוף פונקציה?

אם והייתי עושה (למרות שאני יודע שלא מומלץ) GOTO לאמצע בלוק כמו פה למשל:

{
int i,j;

i = 27;
j = i+2;
printf("%d %d", i, j);
...
}

מה היה קורה?

2- מה קורה בדיוק בבלוקים של לולאות שמכריזים בהתחלת הלולאה על משתנה?

לדוגמה:

while (!Quit){
int i=0;
i++
....
}

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

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

1- בסוף הבלוק המשתנה מושמד כמו בסוף פונקציה?

אם והייתי עושה (למרות שאני יודע שלא מומלץ) GOTO לאמצע בלוק כמו פה למשל:

די פשוט - i ו-j מוגדרים אך ורק בתוך הבלוק. כשאתה יוצא מהבלוק הם "נמחקים" (הם הרי לא באמת נמחקים, פשוט הקומפיילר לא ייתן יותר לגשת אליהם, וה-stack מסתדר בהתאם). אם הם היו קלאסים (ב-C++ כמובן), אז ב-destructor שלהם היה נקרא כשאתה יוצא מהבלוק.

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

2- מה קורה בדיוק בבלוקים של לולאות שמכריזים בהתחלת הלולאה על משתנה?

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

מקרה אחד יוצא דופן הוא המקרה הזה:

for (int i = 0 ; i < 5 ; ++i) {
// do something
}

כאן ה-i נמצא רק ב-scope של הלולאה (כלומר אחרי שמסתיימת הלולאה, i אינו נגיש יותר), אבל בניגוד למשתנה שהוגדר בתוך הלולאה, i לא יוגדר מחדש בכל איטרציה, אלא יעבור בין האיטרציות. (אני לא בטוח אם המבנה הזה אפשרי ב-C או רק ב-C++).

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

כן, התכוונתי הפוך.

ואתה יכול לעשות

myFunc(screen, Coord(5, 6));

אה אפשר לעשות את זה מאמצע בלוק?

טוב אני מניח שזה הדבר הכי קרוב למה שחשבתי עליו בהתחלה.

תודה רבה לכולכם על כל התשובות.

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

ארכיון

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

×
  • צור חדש...