עבור לתוכן

buffer - צריך הסבר..

Featured Replies

פורסם

שלום,

מספר שאלות..

1. מהו buffer? (לפי מה שהבנתי עד עכשיו, באפר הוא מחיצה כלשהי בזיכרון שיכולה להיות בכל גודל ולהכיל כל סוג ערך).

2. מישהו יכול להסביר לי את ההגדרה הבאה:

void* buffer

איך משתנה יכול להיות void ומה זה אומר?

האם במשתנה מסוג כזה אני יכול לשים כל ערך (מחרוזת, מספר וכו'..)?

האם buffer חייב להיות מסוג void*?

תודה מראש!

פורסם

void *buffer;

אומר בסה"כ ש buffer הוא מצביע בלי טיפוס.

משתנה רגיל לא יכול להיות VOID, רק מצביע.

שימוש במצביע שכזה מאפשר:

- לבנות קוד של רשימה מקושרת, כאשר כל איבר בה יכול להכיל כל סוג של מידע מבלי שהקוד של הרשימה המקשורת יהיה איכפת מה יש בפנים.

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

כאשר לרוב מגיעים לשימוש במה שהמצביע מצביע עליו כדאי לעשות המרה לטיפוס המצופה ו/או לדעת עוד מידע (למשל אם זה מערך, מה גודל כל תא). אם הטיפוס של החוצץ ידוע מראש וקבוע מומלץ להשתמש בטיפוס הנכון שלו במקום VOID על מנת להבטיח נכונות בזמן קימפול.

תסתכל על הדוגמא למשל של הפונקציה QSORT ותראה מה הקלט שלה.

פורסם
  • מחבר

סבבה הבנתי, תודה.

יש לי עוד שאלה: מתי יש צורך להשתמש במשתנה מסוג void*?

פורסם

exercise נתן לך דוגמאות.

שים לב שהשימוש ב-*void נחוץ בעיקר ב-C, ופחות ב-++C. ב-++C אפשר להשתמש בירושה או ב-templates בשביל להשיג את אותו הדבר ברוב המקרים.

פורסם
  • מחבר

אוקי..

יש אפשרות להשתמש ב-void* בלי לדעת איזה טיפוס יש בו?

נניח לכתוב פונקציה שמקבלת void* buffer ומחזירה את מצב הביט במיקום ה-i.

פורסם

כן, אתה צריך להמיר אותו למשהו אחר ואז לגשת למה שאתה רוצה (זה סה"כ קטע בזיכרון).

ארכיון

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

דיונים חדשים