עבור לתוכן

בעיית פויינטרים ב C

Featured Replies

פורסם

אני קצת מסתבך סביב עצמי עם פוינטרים לאחרונה.

אני מנסה לבצע השמה פשוטה אך משהו כנראה הסתבך לי.

יש לי שני מבנים,


struct object { void * a; };
typedef struct object* objectP;
typedef struct { objectP array; }objectArr;
typedef objectArr* objectArrP;

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

בקטע אחר בתכנית, בוצע איתחול למערך של אובג'קטארר בצורה הבאה:


array = (objectP)malloc(sizeof(struct object) * 4);

וכעת יש לי שיטה בערך כזו:


static void addobject(objectArrP list, objectP obj) { list->array[0] = obj; }

כמובן שלא בדיוק 0, ולא בדיוק 4 וכדומה כמובן שזו רק אילוסטרציה להבנת העניין.

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

בקומפילציה אני מקבל את השגיאה הבאה:


error: incompatible types when assigning to type ‘struct object’ from type ‘objectP'

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

פורסם

הטיפוס של [list->array[0 הוא object, והטיפוס של obj הוא objectP. אי אפשר לבצע השמה מאחד לשני. על מנת שזה יעבוד, אתה צריך או ש-array יהיה מטיפוס *objectP, או לעשות השמה של obj* במקום obj.

פורסם
  • מחבר

תודה על המענה הזריז,

שימוש בהשמה עם *obj, האם זה בעצם יפנה את הפוינטר שיש לי ב array[0] לאוביקט הנתון או שיבצע העתקה שלו by value?

פורסם

by value. שים לב ש-[array[0 הוא לא מצביע, אלא אובייקט מטיפוס object.

ארכיון

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

דיונים חדשים