פורסם 2004 בפברואר 721 שנים נתונה לי פונקציה.. צריך רק להגיד באיזו שורה יש שגיאה ולמה?? אני חשבתי שהשגיאה היא בשורה שלפני return אבל אומרים לי שזה לא נכון:int main(void){int na=666;int *pna1=&na, *pna2=(int*)na;int **ppna1=&pna1, **ppna2=&pna2;*pna1=1;*pna2=2;*ppna2=pna1;**ppna2+=10;*ppna2+=10;return 0;}בכל מקרה בלי קשר לשורת השגיאה מה עושה השורה שלפני return?ומה בדיוק קורה אחרי שמגדירים *pna2=(int*)na??
פורסם 2004 בפברואר 721 שנים דבר ראשון מה לעאזל התוכנית הזאת עושה?דבר שני, מה זה ה**, אני מכיר רק * אחד, לפוינטרים
פורסם 2004 בפברואר 721 שנים השגיאה היא בשורה*pna2=2;בגלל שהגדרת את pna2 בתור na ולא מצביע ל-na ככה שאתה בעצם משנה מקום בזיכרון שלא שייך לך. מה שהשורה הזאת עושה זה בעצם לשנות את התוכן של כתובת 666 וזה כמובן לא שייך לך.*pna2=(int*)naגורם לכך ש-pna מצביע לכתובת na=666 בזיכרון, אתה חייב לעשות cast בגלל ש-pna2 הוא מטיפוס int* ו-na הוא מטיפוס int
פורסם 2004 בפברואר 721 שנים איך יש RETURN אם הפונקציה היא VOIDועוד דברהפונקציה מחשבת כל מיני דברים ובסופו של דבר לא משנה מה מחזירה 0מה עשינו פה??
פורסם 2004 בפברואר 721 שנים הפונקציה היא int main ככה שחייבים להחזיר ערך. ב-C אמיתי (ansi-c) הפונקציה main חייבת להחזיר int והיא לא יכולה להיות void. כמובן שכל קומפיילר כמעט שתעבוד עליו יקבל גם void main אבל זה בגלל שהוא קומפיילר ל-C++.זה ש-main לא עושה כלום זו לא הכוונה של התרגיל, הוא סה"כ משנה להבין משחק עם מצביעים ולא חשוב לו מה מוחזר בסוף.יש לך עוד שגיאות, כל מה שצריך זה לעקוב אחרי התוכנית עם טבלה1. int na=666;2. int *pna1=&na, *pna2=(int*)na;3. int **ppna1=&pna1, **ppna2=&pna2;4. *pna1=1;5. *pna2=2;6. *ppna2=pna1;7. **ppna2+=10;8. *ppna2+=10;אחרי שורה 3 מתקייםna=666, pna1 pointes to na, pna2 pointes to address 666, ppna1 pointes to pna1 and ppna2 pointes to pna2.line 4 changes na to 1 (na=1)line 5 changes the val in address 666 to 2 (you dont own that address so this is a write error)line 6 changes ppna2 to point to naline 7 changes the val in address na=1 to 10+whatever was there before (once again you done own address 1 so thats a write+read error)line 8 changes na to 10+1
פורסם 2004 בפברואר 721 שנים תיקון קל1. int na=666;2. int *pna1=&na, *pna2=(int*)na;3. int **ppna1=&pna1, **ppna2=&pna2;4. *pna1=1;5. *pna2=2;6. *ppna2=pna1;7. **ppna2+=10;8. *ppna2+=10;אחרי שורה 3 מתקייםna=666, pna1 pointes to na, pna2 pointes to address 666, ppna1 pointes to pna1 and ppna2 pointes to pna2.line 4 changes na to 1 (na=1)line 5 changes the val in address 666 to 2 (you dont own that address so this is a write error)before line 6 ppna2 points to pna2 witch points to address 666line 6 changes *ppna2(=pna2) to point to what pna1 points to. pna1 points to na so it sets pna2 to points to na. (so now ppna2->pna2->na)line 7 changes to na=1+10line 8 changes pna2 to point to 10+(the address of na) (This is ok while you done read/write to that address)
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.