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

ما الهدف من ان اجعل المؤشر يشير الى شيء ...

بدأه (( عبدالله )) في 29 أغسطس 2008 · 12 رد · 1,671 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

طبعاً يبغالي فترة من الوقت حتى اتأقلم قليلاً مع المؤشرات ، انا فهمت كثير من دروس الأخوة والكتب العربية ( مازلت اقول العربية ) ..

انا فهمت امور بسيطة في المؤشرات وهي تعريفها وحجز مساحة لها وتثبيت المؤشر وفهمت امور الحمد لله خليتني شوي اتقرب للمواضيع اكثر ..

لكن ما يحيرني ان كل الكتب العربية والشروحات لا تتطرق بالكثير من الأمثلة عن المؤشرات ... يعني يشرح المؤشر على الطاير ^^ << كلمة جديدة

واكثر الأمثلة المشروحة بالكتب العربية والشروحات = مكرره ، يا اخوان لما يجي الواحد يألف كتاب جديد او يضع شرح جديد لابد ان يغير شوي عن الكتب الأخرى ..

طيب انا قرأت من اكثر من 3 شروح عن المؤشرات وعرفت معنى المؤشرات لكن الى الآن ما شعرت شعور حقيقي لفائدتها ، يعني لا يوجد شرح واضح يبين لي فائدة المؤشر عن الأستخدام العادي ( سواء للمصفوفة ) ..او غيرهـا ...

طيب هل بأمكان احد ان يعطيني شرح موجز خفيف مدعم بالأمثلة المفيدة لفائدة المؤشرات العظيمة ^^ ...

لا احد يقول لي ان بالؤشرات تقدر تعمل مصفوفة متغيرت الحجم ، طيب غير هذه الفائدة هل يوجد ...؟

منتظر جواب ...

ملاحظة: ترى يا جماعة بعض المرات اكون فاهم الأمور واتعمد انزال موضوع بالمنتدى ، لاني بصراحة بمثل هذه المواضيع ترسخ الفكرة عندي وتزداد معلوماتي ( يعني شوي شوي علي ^^ ) .

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#2

اخى عبد الله :: لا تأخذ هذا الكلام على انه كلام شخصى

  • استخدم Google
  • هناك الكثير من المواضيع فى كتاب الفريق العربى
  • انت كتبت موضوع من قبل عن المؤشرات و تم الشرح فيه و ارفاق الروابط و كل شئ ... ماذا تريد اكثر من ذلك
#3

الذي اريده منكم هو تزويدي ببعض الأمثلة التي تبين لي اهمية البوينتر ...

انا اطلعت على كثير من الشروحات وكلها تستخدم نفس الأمثلة ( لا يوجد شيء جديد ) ،اقصد العربية منهااا ..

هذا ما جعلني اضع موضوع هنا ، لكن ، ربما جوجل وعزل المنتدى هو الحـل ^^ <<< هذا ما تريده

تم تعديل هذه المشاركة بواسطة (( عبدالله )) في 29 أغسطس 2008 في 17:37

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#4

يا أخى عبد الله السلام عليكم

وهل فائدة المؤشرات فى انشاء المصفوفات الديناميكيه فائده قليله....؟

وطبعا لا أحد ينكر فائدتها فى الحجز الديناميكى للمتغيرات بإستخدام new و delete

ووجودها بقوه فى موضوع تعدد الواجهات polymorphism

وأيضا فى البرمجه الكائنيه وجود المؤشر this الذى يشير الى الكائن عند إنشاءه

والفائده الرهيبه التى يقدمها هذا المؤشر فى البرمجه

وغيرها وغيرها

تحياتى

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#5

اخى عبد الله مع احترامى للجميع ... لا توجد كنب عربية قوية فى البرمجة الا كتب تعد على الاصابع ...

اذهب للكتب الانجليزية ففيها الكثير و الكثير و الكثير .... و ستجد فائدة المؤشرات فى الكتب ما بين المتوسطة و المتقدمة , كتب المبتدئين جميعا تعطى نفس الامثلة

اذهب لمكتبة المنتدى و سترى الكثــــــيــــــر مما اقوله لك

بارك الله فيك

#6

حاول أن تكتب Linked List أو Tree و سترى الفائدة بنفسك

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#7

read PartI , Part2 ...

مدعم بالصور heap - stack

اقراء هذا المقال

/index.php?showtopic=169469

عندما تكون الذاكره في مخيلتك هي عباره عن عنوانين وكل عنوان يملك قيمة سوف تدرك ان وجود المؤشر امر منطقي .

تحياتي لك .

سبحان الله , الله اكبر , ولله الحمد

#8

سؤالك منطقي جدًا يا عبد الله.

والإجابة لسؤالك هي كما يلي :

عندما تكتب برنامج يتعامل مع كذا شئ ، مثلاً لعبة شطرنج ، تعرف بأن عدد القطع عند كل فريق هو 16 ، منهم ثمانية عساكر وملك ووزير وفيلين وحصانين وطابيتين ، هذه معلومة معروفة ومؤكدة.

وبالتالي يمكنك إنشاء متغير لكل قطعة من هذه القطع وبكل سهولة وأنت تكتب شفرة اللعبة تعرف أنك عندما تريد التعامل مع الحصان الأول في الجيش الثاني مثلاً فإن المتغير الذي يمثله موجود ومعروف ، لن تجد مشكلة في البحث عنه.

لكن تخيل أنك تبرمج لعبة حربية وليست لعبة شطرنج ، أي أنك لا تعرف عدد القطع الحربية ( من دبابات وعساكر وطائرات وسفن وأنواعهم ) كما أن كل من اللاعبين يستطيع إنشاء مزيد من القطع الحربية ، في هذه الحالة أمامك حلين :

1- إما أن تنشئ متغيرات للعدد الأقصي من القطع الحربية ، وتخفي بعضها وتظهر بعضها داخل اللعبة ، بمعني أنه لو أن لعبتك يمكنها أن تحتمل ثلاثة آلاف قطعة حربية لكل لاعب ، وعدد اللاعبين مثلاً 4 ، فإنك تنشئ 12 ألف متغير وتظهر منهم ما يختار اللاعبون صنعه ، بمعني أنه إذا كان اللاعب الأول يملك جيش به 30 قطعة ، والثاني 35 والثالث 25 والرابع 50 ، فإن العدد الكلي للمتغيرات يفترض أن يستهلك مساحة 160 قطعة حربية ، ولكنك تستهلك (في الذاكرة) مساحة 12 ألف قطعة حربية وتخفيهم جميعًا عن نظر اللاعبين وتظهر فقط ال 160 المستخدمين من قبل اللاعبين. أي أن استهلاكك للذاكرة هو دائمًا في الحد الأقصي سواء استخدمت هذا الحد الأقصي كله أم استخدمت ربعه أو عشره.

هذا غير أن كتابة 12 ألف تعريف متغير في الشفرة المصدرية هو أمر شبه مستحيل :)

2- الحل الثاني هو أن تستخدم المؤشرات ، تستخدم بنية بيانات تحوي مؤشرات تمثل العدد الذي أنشأه اللاعبون فقط من القطع الحربية ، وكل مؤشر يتم تعيين الذاكرة إلي المتغير الذي يشير إليه عند الحاجة ، وعندما لا تعود تحتاج المؤشر/المتغير (في حال تدمير وحدة حربية مثلاً) فإنك تقوم بتحرير ذاكرة المتغير التي كان يشير إليها المؤشر ، وبالتالي لاتستخدم من الذاكرة سوي الكمية التي تحتاجها فقط ، كما أنك لا تحتاج إلي كتابة 12 ألف متغير في الشفرة المصدرية ، فقط عليك أن تحدد بنية البيانات التي تحمل عددًا قد يتغير من المؤشرات وتشير إلي كل واحدة حربية في اللعبة برقم المؤشر الخاص بها في وحدة البيانات ( أو هناك طرق أخري ) وبالتالي لا تحتاج لكتابة 12 ألف متغير مختلف.

وإذا لم تكن الفائدة قد وضحت بعد فهذا مثال آخر :

مازلنا داخل اللعبة الحربية ، تخيل أن هناك دبابة تطلق صاروخا يصيب كل القطع الحربية في دائرة نصف قطرها 20 متر .

كيف تعرف ما هي بالضبط القطع الحربية الموجودة في مدي 20 متر من مكان انفجار الصاروخ؟

لو أنك سميت كل قطعة حربية في اللعبة باسم معين لاضطررت أن تكتب شفرة تعاين جميع المتغيرات التي تمثل القطع الحربية لتبحث هل هي في المدي المطلوب أم لا . وكتابة شفرة كهذه قد تستغرق منك بضع سنوات بينما مع المؤشرات المسألة لا تستغرق دقيقتين :

فقط تكتب شفرة تعاين بينة البيانات التي تحوي المؤشرات ، بأن تنشئ مؤشر لا يشير إلي شئ مبدأيًا ، ثم تكتب الشفرة بحيث تعطي هذا الموشر قيمة المؤشرات التي هي داخل بنية البيانات بطريقة تسلسلية واحدًا تلو الآخر ، ثم تعاين البيانات التي يشير إليها مؤشرك في كل مرة وتري هل هي في مدي الصاروخ أم لا.

بالشفرة يكون التوضيح أسهل :

لاحظ أن هذه الشفرة مكتوبة لغرض توضيحي ، وهي بها أخطاء ولن تعمل في الواقع لكنها توضح لك الفكرة بعيدًا عن التعقيد


vector<military_unit*> units_data_structure;

////
/// يملا units_data_structure بالمؤشرات التي تشير إلي القطع الحربية
///

/// والآن الشفرة التي تعاين وجود القطع الحربية في مدي الصاروخ

for( int i = 0; i < units_data_structure.size(); i++)
{
military_unit* myMagicPointer = units_data_structure;
bool isItInRange = myMagicPointer->isInRange(myRocketLocation);
if(isItInRange == true)
{
// القطعة الحالية في مجال الصاروخ ، دمرها
myMagicPointer->destroy();
delete myMagicPointer;
}
else
{
// القطعة الحالية ليست في مجال الصاروخ
}
}

لا أدري إن كان شرحي يفهم منه شئ ، لكن هذه محاولتي علي الأقل ،

تحياتي لك.

#9

جزاكم الله خير اخوي على المساعدات وبارك الله فيكم ،

واشكرك من كل اعماقي اخي عمرو على الرد اللي كنت ابحث عنه ^^ ، يعني ملخص الكلام ان فائدة المؤشرات تكون اكبر في البرامج الكبيرة كالألعاب وغيرهـا ... ( علاقة طردية )

لاني لم اقم الى الآن بكتابة برنامج كبير ، لم اشعر بفائدة المؤشرات ، لكن جوابك كان هو ما ابحث عنه ، لذلك قلت في رأس الموضوع ما الهدف ...

وكان الهدف هو مجال التدمير ^^ الـ 20 متر ...

بارك الله فيك اخي الكريم ... وياليت نشوف لك شروحات بالمنتدى لان اسلوبك في الشرح واضح 100% ...

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#10

سعيد أن الشرح أعجبك أخي عبد الله :)

#11

في الحقيقة لم أجد شرح أجمل للمؤشرات من شرح الأخ عمرو ,, أشكرك من أعماق قلبي

أخوك ابن النيل

#12

بارك الله فيك أخي ابن النيل :)

#13

اخي عبد الله ،

اذا كنت مبتدئ فقرء كتب

how to program

complete reference

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

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