logo

מצביע C dereference

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

מדוע אנו משתמשים במצביע הרחקה?

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

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

הבה נבחן את השלבים הבאים כדי להפנות מצביע.

  • ראשית, אנו מכריזים על המשתנה השלם שאליו מצביע המצביע.
 int x =9; 
  • כעת, אנו מכריזים על משתנה המצביע השלם.
 int *ptr; 
  • לאחר ההכרזה על משתנה מצביע שלם, אנו מאחסנים את הכתובת של משתנה 'x' למשתנה המצביע 'ptr'.
 ptr=&x; 
  • אנו יכולים לשנות את הערך של משתנה 'x' על ידי הפקת מצביע 'ptr' כפי שניתן להלן:
 *ptr =8; 

השורה שלמעלה משנה את הערך של משתנה 'x' מ-9 ל-8 מכיוון ש-'ptr' מצביע על מיקום ה-'x' והתייחסות של 'ptr', כלומר, *ptr=8 יעדכן את הערך של x.

בואו נשלב את כל השלבים לעיל:

 #include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;} 

תְפוּקָה

מצביע C dereference

הבה נבחן דוגמה נוספת.

 #include int main() { int x=4; int y; int *ptr; ptr=&x; y=*ptr; *ptr=5; printf('The value of x is : %d',x); printf('
 The value of y is : %d',y); return 0; } 

בקוד למעלה:

  • אנו מכריזים על שני משתנים 'x' ו-'y' כאשר 'x' מחזיק בערך '4'.
  • אנו מכריזים על משתנה מצביע 'ptr'.
  • לאחר ההכרזה על משתנה מצביע, אנו מקצים את הכתובת של המשתנה 'x' למצביע 'ptr'.
  • כפי שאנו יודעים שה-'ptr' מכיל את הכתובת של משתנה 'x', אז '*ptr' זהה ל-'x'.
  • אנו מקצים את הערך של 'x' ל-'y' בעזרת משתנה 'ptr', כלומר, y=* ptr במקום להשתמש במשתנה 'x'.

הערה: לדברינו, אם נשנה את הערך של 'x', אז גם הערך של 'y' ישתנה מכיוון שהמצביע 'ptr' מחזיק את הכתובת של המשתנה 'x'. אבל זה לא קורה, מכיוון ש-'y' מאחסן את העותק המקומי של הערך '5'.

תְפוּקָה

מצביע C dereference

בואו נשקול תרחיש אחר.

 #include int main() { int a=90; int *ptr1,*ptr2; ptr1=&a; ptr2=&a; *ptr1=7; *ptr2=6; printf('The value of a is : %d',a); return 0; } 

בקוד למעלה:

  • ראשית, אנו מכריזים על משתנה 'a'.
  • לאחר מכן אנו מכריזים על שני מצביעים, כלומר, ptr1 ו- ptr2.
  • שני המצביעים מכילים את הכתובת של משתנה 'a'.
  • אנו מקצים את הערך '7' ל-*ptr1 ו-'6' ל-*ptr2. הערך הסופי של 'a' יהיה '6'.

הערה: אם יש לנו יותר ממצביע אחד המצביע על אותו מיקום, אז השינוי שנעשה על ידי מצביע אחד יהיה זהה למצביע אחר.

תְפוּקָה

מצביע C dereference