נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
פורום מחשבים כללי
RSS UnderWarrior Forums : RSS פורום מחשבים כללי
נושא

נושא: שאלה על רשימות מקושרות ומבני נתונים

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
mikebb
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 29 April 2011
משתמש: מנותק/ת
הודעות: 11
נשלח בתאריך: 20 September 2011 בשעה 13:40 | IP רשוּם
ציטוט mikebb

אז ככה,

רציתי לשאול נניח ובהינתן רשימה מקושרת.

ומסתבר שאני צריך למחוק את האיבר האחרון ברשימה.

ואז אני אומר אם temp שזה פוינטר כלשהו שאני צריך למחוק אליו הוא בעצם פוינטר סוף הרשימה (שווה ל-end)

ומתקיים ש-prev->next == temp (הכוונה עם prev עשיתי איטרציה לפוינטר שאותו אני צריך למחוק).

אז ברגע שאני עושה free(temp) לאן ה-end מצביע, ובכללי השאלה היא מה קורה אם שני פוינטרים מצביעים למיקום שבו עושים "שחרור" לאן הם מצביעים לאחר מכן?

 

 

כך ושאלה שניה שיש לי.

נתונים לדוגמא.

struct something *a[3];

struct some thing a2 [3]

ונניח אני מאכסן כתובת של כל מערך:

a = &a2[i

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

לדוגמא:

struct something * ptr;

ptr = a[0]

ptr = ptr + 1

ptr - >id = 3

רציתי לשאול אם הדבר הזה יעבוד בכל צורה? שימו לב עברתי לא על פי המערך מצביעים אלא על פי המערך הרגיל. תודה !

 

אה ועוד משהו קטן, אם אני מעביר מצביע לקובץ *FILE לפונקציה ומשנה שם את הסמן האם זה משתנה בתוכנית הכללית? וכיצד עובדת העברת FILE לפונקציה?

חזרה לתחילת העמוד הצג את כרטיס החבר של mikebb חפש הודעות אחרות של mikebb
 
NewMan
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 06 May 2011
מדינה: Israel
משתמש: מנותק/ת
הודעות: 29
נשלח בתאריך: 20 September 2011 בשעה 22:32 | IP רשוּם
ציטוט NewMan

לשאלה הראשונה- free לא משנה את ערכי המצביעים. ועליך להיות
זהיר מאוד בשימוש בהם, שלא יווצר מצב שבו פוינטר מצביע
לזיכרון שכבר שוחרר. בדוגמה שהבאת, end ו- prev->next עדיין
מצביעים לזיכרון ששוחרר, ואתה חייב לשים בהם null.
לשאלה השניה- קידום מצביע מקדם אותו במספר הבתים של הטיפוס
אליו הוא מצביע. כך שאתה יכול להשתמש בטכניקה הנ"ל.
חזרה לתחילת העמוד הצג את כרטיס החבר של NewMan חפש הודעות אחרות של NewMan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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