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

معلومات عامة عن المؤشرات

مغلق
بدأه ttss في 12 يوليو 2005 · 10 رد · 5,038 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله

اخواني من فتره بدأت بتعلم لغه السي ,,, والحمد لله فهمت الاساسيات فيها لكن لا اعرف كيف اكمل مشواري مع هذه اللغه . بماذا تنصحوني ان ابدء او بمعنى اصح ما هي الخطه التي يجب ان اتبعها في تعلم هذه اللغه ؟؟؟ مثلا الاساسيات >> سوكيت >> الخ...

وسؤال اخر , ما هي فائده البوينتر ؟؟؟ ارجوا عدم الاجابه ب :

البوينتر هو مؤشر لمتغير معين . هذا الكلام حفظته لكن المشكله اني لم افهم الفائده من استعماله ؟؟؟؟ يعني في حين استخدام المؤشر سيكون تقريبا عباره عن متغير جديد , في هذه الحاله لماذا لا نكتب متغير بدل ان نستعمل البوينتر؟؟؟

والسلام عليكم

#2

رديت عليك .. امس .. ما ادري هل قرأت الموضوع قبل ان تحذف المواضيع .... لاني متعاجز لا اعيد اللي قلته : )

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

عزيزي الشمري , انا اشكرك جدا على ردك مع اني ما شفته :) . للاسف انا كتبت الموضوع وتفاجأت انه غير موجود بعدها :(

#4

البوينتر تظهر فائدة حين تبدا بتعلم الــ Data Structure

كل ماعليك أن تتمرن الان على طريقة استخدامه والتعامل معه

دمت كما تحب

#5

يعنى من الاخر واهم فيدة لة انة يمكنك من النحكم فى الram وانت وشطارتك

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#6

البوينتر له عدة فوائد:

- التعامل مع الذاكرة مباشرة .. و هذه ليست فائدة كبيرة للمبرمج العادي, لكن ربما تكون فائدة لمخترقين الانظمة و صانعي الفايروسات :P

- عند التعامل مع الـ struct ستجد انك احيانا تنشئ "ستركتات" كبيرة الحجم, و في هذه الحالة فكلما ارسلتها الى function معين يستم نسخ الستركت كله .. و هذه العملية تسبب بطء في البرنامج, لذلك من الافضل اخذ عنوان هذا الستركت و ارساله الى الفنكشن

- في الـ data structures مثل الـ linked list و هذي الشغلات .. المؤشرات هي العمود الفقري لها! ستفهم لما تدرسها

- في الكثييير من الاحيان (كثيييير جدا .. خصوصا في البرامج المتوسطة الى كبيرة الحجم) ستجد نفسك في موقف يتطلب تسجيل عدد معين من المتغيرات او الـ structs, و لكن المشكلة انك لا تعرف وقت كتابة البرنامج كم من الذاكرة تحتاج .. مثلا عندما تقرأ ملف, فلا يمكنك معرفة عدد الحروف داخل الملف اثناء كتابة البرنامج .. فإذا اردت تخزين كافة الحروف مثلا في مصفوفة من اجل استعمالها في شيء اخر لاحقا .. فما هو حجم المصفوفة؟ الاجابة لا يمكنك معرفتها الا اثناء تنفيذ البرنامج ..

ما علاقة هذا بالمؤشرات؟ اصبر اصبر .. جايك بالحكي:

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

و هذه الشغلة عندها اسم: dynamic memory allocation

يعني انشاء متغيرات جديدة أثناء تنفيذ البرنامج!

يعني لو حاولت عمل شيء مثل:

for( int i = 0; i < 10; i++ )
{
    int x = 0;
}

و توقعت انه سينتج لك عشر متغيرات اسمائهم x, فإنت غلطان (كيف ستفرق اصلا بين كل هذه الاكسات؟).. سيكون هناك متغير واحد فقط اسمه x

و لكن, تستطيع القيام بشيء مثل:

for( int i = 0; i < 10; i++ )
{
    int * x = new int; //this is in C++, in C I think you use malloc( sizeof( int ) )
}

في هذه الحالة ستحجز مساحة جديدة في الذاكرة و سيكون x مؤشر لهذه المساحة ليمكنك من التعامل مع الـ int الجديد.

طبعا في هذا المثال فإنك ستفقد المؤشرات لجميع المتغيرات الجديدة ما عدا آخر واحد .. لانك تستخدم نفس المؤشر للوصول الى عناوين الذاكرة هذه, و لكن هذا كان مجرد مثال, اما في البرامج الحقيقية فلا بد أم\ن تقوم بتخزين هذه المؤشرات في linked list او شي من هذا القبيل حتى لا تضيع منك.

مثلا عندك لعبة تشتغل عالانترنت (ملتي بلير)

ممكن في اي لحظة ياتي لاعب جديد و يتصل بالسرفر .. و ممكن في اي لحظة ان يخرج لاعب اخر من السرفر .. طيب كيف تتعامل مع هذه الشغلة؟

لازم يكون عندك طريقة للتعامل مع اللاعبين, مثل struct بسيط يحتوي على اسم اللاعب و رقمه و صحته و اسلحته و الذخائر .. الخ (أقول مثلا فقط)

و لما يتصل لاعب جديد لازم تنشيء struct جديد .. لكنك لا تعرف متى سيتصل اللاعبين!

إذا ما فهمت هذي النقطة بشكل جيد فإن شاء الله ساحاول اوضح اكثر.

- السبب الاخر للمؤشرات هو عندما تتنقل للـ ++C و تتعامل مع الـ Object Oriented Programming, فالكثير من الخصائص المهمة مثل الـ polymorphism لن تعمل الا اذا تعاملت مع المؤشرات.

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 13 يوليو 2005 في 08:23

#7

مشورين اخواني عالاهتمام .... افهم من ردودكم اني يجب ان اتعلم كيف استخدم البوينترز اما عن فهم عمله ساتعلمه عند الدخول في مواضيع ال data structers?

ماذا عن خطه البدء في تعلم لغه السي ؟؟؟ كيف ابدء وماذا يجب ان اتعلم اولا ؟

#8

أحب أن أتكلم هـنا قليلاً عـن هذا الموضوع .. المؤشرات والسي بلس بلس :

- تذكر لا يوجد في السي بلس بلس جامع قمامـة (أو نفايات gc) لذلك ففي السي بلس بلس يجب أن تكون حذراً لأقصى حد ممكن ... حتى لا تحصل لك مصيبـة أثناء استخدامك للمؤشرات......

- عدم وجود جامع قمامة في السي بلس بلس سيزيد من احتمالية حدوث تسرب للذاكرة memory leak .... لذلك كما قلت في الفقرة السابقـة احذر جيداً.

- إذا استخدمت الأمر new لحجز ذاكرة لأي كائـن ..... فأولاً يتم حجز الذاكرة لهذا الكائن ثم يتم استدعاء دالة بناء الكائـن .... إذا استخدمت الأمر delete يتم استدعاء دالة الهـدم أولاً للكائن ثم إلغاء ذاكرة هذا الكائـن .....

- إذا قمت بأي عـملية إلغاء لأي مؤشر احرص دائماً على أن تقوم بإسناد القيمـة صفر إلى المؤشر حتى بعد حذفـه .

- تستطيع أن تقوم بكتابة new و delete جـديدة للكلاس الذي تعـمل عليه ، قد تسأل لماذا أقوم بهذا العـمل ... هـناك حالات لفعل هذا الأمر منها مشكلة heap fragmentation يعـني أن الذاكرة تكون مقطعـة :D ..... بمعـنى آخر أنه يوجد كمية فارغـة من الذاكرة ولكن هذه الكمية مقسمـة إلى أقسام صغيرة .. لا تكفي لحجز كلاس آخر هـناك حالات أخرى ولكن ليس هذا المجال كافي لذكرها ....

- حينما يحدث لك تسرب للذاكرة .. تستطيع إما أن تلقى استثناء .. أو في حال إن كنت مبرمجاً عبقرياً أن تقوم بجلب الذاكرة بالقوة :D يعـني استدعاء الذاكرة .... لكن لم يسبق لي أن كتبت معامل new يقوم بهذا الفعل الخطير ... ولا أنصحك به لأنه متقدم للغاية.

- ما يميز المؤشرات بالرغـم من صعوبتها وغـموضها (وفي بعض الحالات تجلب الصداع) أنها ممتعـة إلى أقصى حد ... بالرغـم من خطورتها.

- في الأخير ... المؤشرات عالم واسع للغاية في السي بلس بلس ... وحينما تنتهي من تعلم لغـة السي بلس بلس ..... وتقرأ كتاباً متقدماً حول السي بلس بلس يتكلم حول الذاكرة ستكتشف أنك لا تعلم شيئاً حول المؤشرات.

#9

(h) السلام عليكم

بصراحة يا أخوتي أنا استفدت كثير من قرائتي لهذه المواضيع

فأنا متعلم جديد للغة c مع هذا فقد تعلمت منكم بجد أشياء كنت اقرأمن الكتاب ولا أفهم

بأتمنى منكم كتابة المزيد من المواضيع المتعلقة ببرمجة c

#10

بالإضافة إلى ماذكره الإخوة أحب أضيف فائدة مهمة من فوائد المؤشرات .. ونحن نتعامل معها يوميا ..

وهي الإختصارات (Shortcuts) التي على سطح المكتب(Desktop) ..... يعني الأيقونات اللي على سطح المكتب ليست إلا عبارة عن مؤشرات للبرامج...

#11

من وجهة نظري فائدة البوينتر - بعيداً عن هياكل البيانات - ممكن ان تفهم من انها وسيلة افضل للوصول الى الذاكرة ..

مثال :

عند استخدام التلفون السيار - الموبايل - فنحن نخزن اسماء الاشخاص الذين نريد التواصل معهم و ارقام تلفوناتهم ..

و كالنتيجة لذلك : عندما نتصل بإي شخص فنحن لا ندخل رقم هاتفه ، بل اسمه من باب الاختصار ..

رقم الشخص المراد الاتصال به هو العنوان الحقيقي في الذاكرة و اسمه مثل المؤشر الذي يشير الى رقم الهاتف ..

فقط احببت سرد هذا المثال من باب تقريب مفهوم المؤشرات :)

بنت اليمن ،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

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

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