عامل إلغاء المرجعية Dereference ( * ) :
كما رأينا للتو ، المتغير الذى يخزن عنوان متغير آخر يسمى "مؤشر" . يقال أن المؤشرات "تشير إلى" المتغير الذى تقوم بحفظ عنوانه .
الميزة المثيرة للاهتمام فى المؤشرات هى أنه "يمكن استخدامها للوصول إلى المتغير الذى تشير إليه مباشرة" . يتم عمل ذلك عن طريق "سبق اسم المؤشر بعامل إلغاء المرجعية ( * ) . العامل فى حد ذاته يمكن قراءته فى صيغة " القيمة المشار إليها بواسطة" .
لذلك ، وبالمتابعة مع قيم المثال السابق ، فأن العبارة التالية :
يمكن أن تقرأ على النحو التالى : "قيمة المتغير baz "تساوى "القيمة المشار إليها بالمتغير foo" ، وسوف تقوم العبارة فعليا بتخصيص القيمة 25 إلى المتغير baz ، حيث أن المتغير foo قيمته 1776 ، والقيمة المشار إليها بواسطة 1776 سوف تكون 25 ( فى أعقاب المثال أعلاه) .
من المهم أن نفرق بوضوح بين أن المتغير foo يشير إلى القيمة 1776 ، فى حين أن (*foo) (مع وجود * تسبق اسم المتغير) تشير إلى القيمة المخزنة عند العنوان 1776 ، وهذه القيمة فى هذه الحالة هى 25 . لاحظ الفرق بين تضمين أو عدم تضمين عامل إلغاء المرجعية كما هو مكتوب بالتعليقات على العبارات التالية :
كود:
baz = foo; // baz equal to foo (1776)
baz = *foo; // baz equal to value pointed to by foo (25)
وبالتالى فإن عامل المرجعية وعامل إلغاء المرجعية هى عوامل مكملة أو متتامة :
· العامل & هو عامل المرجعية ، ويمكن قراءته كما يلى "عنوان ال .." .
· العامل * هو عامل إلغاء المرجعية ، ويمكن قراءته كما يلى "القيمة المشار إليها بواسطة ..." .
وبالتالى فإن لها معانى معكوسة : المتغير الذى يرجع إليه بالعامل & يمكن أن يتم إلغاء مرجعيته بالعامل * .
فى وقت سابق أجرينا عملتى التخصيص التالية :
كود:
myvar = 25;
foo = &myvar;
بعد هذه العبارات مباشرة ، فإن جميع العبارات التالية تعطى "صواب" true كنتيجة :
كود:
myvar == 25
&myvar == 1776
foo == 1776
*foo == 25
· التعبير الأول واضح تماما ، باعتبار أن عملية التخصيص التى أجريت على المتغير myvar كانت myvar = 25 .
· التعبير الثانى يستخدم عامل المرجعية (&) ، والذى يعيد return عنوان المتغير myvar ، والذى فرضنا أن له القيمة 1776 .
· التعبير الثالث واضح إلى حد ما ، لأن التعبير الثانى كان صحيحا وأن عملية التخصيص التى أجريت على المتغير foo كانت foo = &myvar .
· التعبير الرابع يستخدم عامل إلغاء المرجعية (*) والذى يمكن قراءتع بالصيغة "القيمة المشار إليها بواسطة ..." ، والقيمة المشار إليها بالمتغير foo هى فى الواقع 25 .
لذلك ، وبعد كل ذلك ، يمكنك أيضا أن تستنتج أنه طالما أن العنوان المشار إلية بالمتغير foo لم يتغير ، فإن التعبير التالى سوف يكون صواب true أيضا :
إعلان (تعريف) المؤشرات Declaring Pointers :