פורסם 2007 באוקטובר 1418 שנים הגדרתי:typedef struct{ int x; int y;}coord;והפונקציה:void DrawLine(SDL_Surface* screen, coord p1, coord p2)ולצורך העניין אני מקבל נקודות שבהם נלחץ העכבר (אני מקבל x ו y בנפרד, לא בצורה שהגדרתי למעלה).עכשיו השאלה שלי היא האם יש דרך לשלוח לפונקציה את הקוארדינטות בלי ליצור משתנה זמני ולשים בו את הנתונים ולשלוח אותו?לדוגמה האם אני יכול לעשות:DrawLine(screen, [x1, y1], [x2, y2])או משהו בסגנון?
פורסם 2007 באוקטובר 1518 שנים אתה רוצה לשלוח לפונקציה שני STRUCTים ולקבל אותם בתוך הפונקציה כהערכים של אותו STRUCT? אם כן אז התשובה היא לא, אי אפשר לעשות את זה.
פורסם 2007 באוקטובר 1518 שנים מחבר אתה רוצה לשלוח לפונקציה שני STRUCTים ולקבל אותם בתוך הפונקציה כהערכים של אותו STRUCT? אם כן אז התשובה היא לא, אי אפשר לעשות את זה.אם הבנתי נכון מה שכתבת פה אז אני התכוונתי לההפך.תעבור ל-C++. שם אתה יכול לעשות את זה (כל עוד הגדרת constructor מתאים).אני גם ככה עובד עם Visual C++, אז למה לא.. אתה יכול לתת לי דוגמה לאיך לעשות את זה (לצורך העניין אתה יכול להשתמש במה שכתבתי בהודעה הראשונה)?
פורסם 2007 באוקטובר 1518 שנים struct Coord{ int x; int y; Coord(int xx, int yy) { xx = x; yy = y; }}והשימוש:Coord myCoord(5, 6);
פורסם 2007 באוקטובר 1518 שנים מחבר אתה מתכוון: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++....}
פורסם 2007 באוקטובר 1518 שנים אגב, ב 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++).
פורסם 2007 באוקטובר 1518 שנים רק שים לב שבVC6 התקן עדיין לא היה מוגדר, ולכן אם הגדרת של את הINT אז הוא היה הולך איתך עד לסוף המר של הפונקציה.
פורסם 2007 באוקטובר 1518 שנים מחבר כן, התכוונתי הפוך.ואתה יכול לעשותmyFunc(screen, Coord(5, 6));אה אפשר לעשות את זה מאמצע בלוק?טוב אני מניח שזה הדבר הכי קרוב למה שחשבתי עליו בהתחלה.תודה רבה לכולכם על כל התשובות.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.