משתנים, מצביעים והקצאת זיכרון.

The Mystique

New member
משתנים, מצביעים והקצאת זיכרון.

הי, האם יש אופציה בקומפיילר של ויזואל C++ לראות את כמות הזיכרון שמוקצת עבור משתנים ? ועוד שאלה קטנה ... האם ניתן ליצור ב C משתנה מסוג מצביע שמצביע על איבר מסוגו ולאתחל אותו שיצביע לעצמו ?
 

The Mystique

New member
גיליתי את sizeof

זה לגבי השאלה הראשונה. השאלה על המצביע למצביע עדיין בתוקף.
 

ihovav

New member
טעות טעות טעות !!!!!!!!!

את לא יכולה לבצע SIZEOF על פוינטר - אם יש לך פוינטר בשם P מסוג CHAR ואת עושה סייז אוף ל P - את תקבלי 4 בייט ואם תעשי ל כוכבית P - תקבלי בייט אחד לא ניתן לבצע SIZEOF על פוינטרים לכן אני מציע שלכל פוינטר תשמרי בנפרד גם את הגודל שלו במשתנה ולכל פונקציה תשלחי את שני הפרמטרים או שתחיצרי מבנה שיכיל את הפוינטר ואת הגודל שלו ואותו תשלחי לפונקציה
 

antidot

New member
אם הזיכרון שלי לא מטעה אותי

כמה שאני זוכר, פוינטר בפלטפורמה של מייקרוסופט מוגדר כ unsigned int (או שזה long ?) ולא משנה לאן הוא מצביע... האם אני טועה ?
 

ihovav

New member
אתה לא טועה

אבל אתה לא יכול להפעיל עליו את האופרטור SIZEOF - אתה תקבל ערך של SIZEOF POINTER - כלומר במקרה של מערכת 32BIT זה יהיה 4 בייט ובמערכת 16BIT זה יהיה 2 בייט
 

The Mystique

New member
שאלתי באופן כללי

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

עידית_

New member
נדמה לי שדווקא לא

לא ניסיתי, ויתכן שאני טועה, אבל במבט ראשון נראה לי שזה דווקא לא יעבוד. הסבר: P הוא מסוג "מצביע ל-anytype" (כאשר ה-anytype הזה הוא כמובן טיפוס מסויים), ואז אתה מנסה לגרום לו להצביע ל-"מצביע ל-anytype", במקום ל-anytype עצמו. במילים אחרות בפקודה השנייה יש מצד שמאל "מצביע ל-anytype" ומצד ימין "מצביע למצביע ל-anytype". לכן נראה לי שזה לא יעבוד.
 

עידית_

New member
לשאלה השנייה

אני חושבת ש- "ליצור משתנה מסוג מצביע שמצביע לאיבר מסוגו" זו סתירה לוגית. נקרא למשתנה הזה P. 1. נגיד ש-P הוא מצביע לסוג X 2. אז זה אומר שגם X הוא מצביע לסוג X 3. ואז P הוא מצביע למצביע לסוג X אבל 3 סותר את 1. לא?! (אבל אולי עם מצביע ל-void זה דווקא יעבוד?!)
 

antidot

New member
בטח שלא יעבוד.

אני רק לא מבין: למה לא לאתחל לNULL ולגמור עם הסיפור ?
anytype* p=&p​
לא יעבוד. הכתובת של P היא
anytype**​
 
למעלה