الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول المؤشرات Pointers

مغلقمُجاب
بدأه Install في 5 مارس 2014 · 5 رد · 695 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته 

هل هناك فارق بين تعريف المؤشر بالطريقة التالية :

int * P;

او تعريفه بالطريقة التالية :

int *p;

اي المسافة بين ال * واسم المؤشر

لان وكما نعلم ال * هي  Derefrence Operator معامل لا مرجعي فهل لها تأثير بطريقة تعريف المؤشرات

ولكم جزيل الشكر

1

{ وَيَوْمَ تَقُومُ السَّاعَةُ يُقْسِمُ الْمُجْرِمُونَ مَا لَبِثُوا غَيْرَ سَاعَةٍ ۚ كَذَٰلِكَ كَانُوا يُؤْفَكُونَ () وَقَالَ الَّذِينَ أُوتُوا الْعِلْمَ وَالْإِيمَانَ لَقَدْ لَبِثْتُمْ فِي كِتَابِ اللَّهِ إِلَىٰ يَوْمِ الْبَعْثِ ۖ فَهَٰذَا يَوْمُ الْبَعْثِ وَلَٰكِنَّكُمْ كُنْتُمْ لَا تَعْلَمُونَ } الروم 55-56

#2 أفضل إجابة
اقتباس
هل هناك فارق بين تعريف المؤشر بالطريقة التالية :

سؤال جيد،

 

المسافات البيضاء لا تؤثر فى هذه الحالة، و بالتالي كلا التعريفان متماثلان، اما بالنسبة للـ Derefrence Operator فيتم معرفة معنى علامة * داخل الكود من السياق حيث:

int *p;

هى تعريف لمؤشر لـ int، أما :

*p = 10;

فهى عمل dereference للمؤشر و وضع قيمة 10 للمكان الذى يشير إليه، و أيضا:

3 * 5

هى تنفيذ عملية الضرب بين الرقم 5 و 3، و نفس الأمر ينطبق على:

3 * x

لو أفترضنا ان x من نوع مؤشر فسيصدر المترجم خطأ لانه لا يمكن التحويل الضمنى من مؤشر لـ int و لو كان x نوع رقمى فستتم عمليات التحويل اللازمه و ستتم عملية الضرب.

 

 

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 6 مارس 2014 في 04:24

1

مدونتي: C++ Tips and Tricks

#3

آه الآن فهمت مع انهم كتبوا في الموقع الرسمي ان كلا التعريفين للمؤشر متشابهين إلا ان الأمور اختلطت علي بين المؤشرات والمعامل اللامرجعي ولكن الآن فهمت جزاك الله كل خير

والله انت من الذين يسارعوا في الخيرات بارك الله فيك يااخي ودامك ذخراً للمبرمجين العرب  :lol:

{ وَيَوْمَ تَقُومُ السَّاعَةُ يُقْسِمُ الْمُجْرِمُونَ مَا لَبِثُوا غَيْرَ سَاعَةٍ ۚ كَذَٰلِكَ كَانُوا يُؤْفَكُونَ () وَقَالَ الَّذِينَ أُوتُوا الْعِلْمَ وَالْإِيمَانَ لَقَدْ لَبِثْتُمْ فِي كِتَابِ اللَّهِ إِلَىٰ يَوْمِ الْبَعْثِ ۖ فَهَٰذَا يَوْمُ الْبَعْثِ وَلَٰكِنَّكُمْ كُنْتُمْ لَا تَعْلَمُونَ } الروم 55-56

#4

أسف على التدخل فى الموضوع, ولكن انتهزت فرصة أن فية مصطلح قد مر عليا كثيرا لكننى لم أفهمة جيدا

*p = 10;
اقتباس

فهى عمل dereference للمؤشر و وضع قيمة 10 للمكان الذى يشير إليه، و أيضا:

 

ما معنى هذا المصطلح dereference, لاننى أراة كثيرا لكن لا أفهم معناة جيدة .

هل يقصد بة إلغاء ربطة بقيمة سابقة, وربطها بقيمة أخرى , أم يقصد بها شئ أخر .

تم تعديل هذه المشاركة بواسطة مستر برمجة في 6 مارس 2014 في 14:57

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

#5
اقتباس
ما معنى هذا المصطلح dereference, لاننى أراة كثيرا لكن لا أفهم معناة جيدة .

p هو متغير يحمل عنوان فى الذاكره، ذلك العنوان هو مكان يحتوى على قيمة نوعها int.

 

للحصول على هذه القيمه أو لتغييرها تحتاج لإعلام المترجم ان هذا ما تريد و يتم ذلك عن طريق إلحاق علامة * قبل المتغير ذات النوع المؤشر (فى حالتنا هذه p)، و بالتالي الصيغه p* تعنى الوصول للمحتوى الذى يشير إليه المؤشر p لإسناد قيمة له أو للحصول على الموجوده.

 

المصطلح dereference يعنى "الوصول للمحتوى الذى يشير إليه المؤشر لإسناد قيمة له أو للحصول على الموجوده".

 

 

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

#6

الان فهمت المقصود بهذا المصطلح.

سبحان الله مع أنى أعلم هذا الكلام الذى شرحتة, لكن لم أكن أعلم أن المصطلح dereference يقصد بة هذا الكلام .

 

جزاك الله كل خير أخى العزيز, وتستاهل (التقييم+)

تم تعديل هذه المشاركة بواسطة مستر برمجة في 6 مارس 2014 في 17:06

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

هذا الموضوع مغلق.

مواضيع مشابهة