עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

עוד שאלה ב C

Featured Replies

פורסם

נתונה לי פונקציה.. צריך רק להגיד באיזו שורה יש שגיאה ולמה?? אני חשבתי שהשגיאה היא בשורה שלפני 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??

פורסם

דבר ראשון מה לעאזל התוכנית הזאת עושה?

דבר שני, מה זה ה**, אני מכיר רק * אחד, לפוינטרים

פורסם

השגיאה היא בשורה

*pna2=2;

בגלל שהגדרת את pna2 בתור na ולא מצביע ל-na ככה שאתה בעצם משנה מקום בזיכרון שלא שייך לך. מה שהשורה הזאת עושה זה בעצם לשנות את התוכן של כתובת 666 וזה כמובן לא שייך לך.

*pna2=(int*)na

גורם לכך ש-pna מצביע לכתובת na=666 בזיכרון, אתה חייב לעשות cast בגלל ש-pna2 הוא מטיפוס int* ו-na הוא מטיפוס int

פורסם

איך יש RETURN אם הפונקציה היא VOID

ועוד דבר

הפונקציה מחשבת כל מיני דברים ובסופו של דבר לא משנה מה מחזירה 0

מה עשינו פה??

פורסם

הפונקציה היא 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 na

line 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

פורסם
  • מחבר

תודה רבה HOLY...

פורסם

תיקון קל

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 666

line 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+10

line 8 changes pna2 to point to 10+(the address of na) (This is ok while you done read/write to that address)

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.