بما اني لاقي ناس كتير بتعاني مع types ال pointers المختلفة في لغة ال C بفكر اعمل thread عنهم، وممكن النهاردة نبدأ بال pointer to function 😃
ولكن قبل ما نبدأ خلوني الأول اقول ايه الهدف من ال pointers في لغات زي الC وال C++ وليه اختفى بعد كدة في اللغات الأحدث واستبدلت بال refrence
ولكن قبل ما نبدأ خلوني الأول اقول ايه الهدف من ال pointers في لغات زي الC وال C++ وليه اختفى بعد كدة في اللغات الأحدث واستبدلت بال refrence
الpointers في الحقيقة تاريخها اقدم من ال ©️ وتعود لعصر الassembly لما كانت الميموري كلها بالنسبة لل programmer سداح مداح وكل اللي محتاجه عشان يشيل اي داتا في الميموري (مثلا string ) هو انه يروح يشوف حتة فاضية (مجازًا يعني) في الميموري ويبدأ يكتب الداتا بتاعته byte by byte ⏬
طبعًا لازم يحتفظ بحاجتين مهمين عشان يعرف ي access الداتا دي بعد كدا من اي scope تاني ، الحاجتين دول هما ال address اللي بدأ يكتب فيه اول بايت من الداتا بتاعته والحاجة التانية هو length الداتا دي والا مش هيقدر هيعرف هحدودها فين , يعني بالمختصر بيحدد بدايتها ونهايتها في الميموري
ال address اللي بيحتفظ بيه ده ما هو الا رقم binary شوية وحايد واصفار لكن هو اللي هيقدر يوصلك للداتا بتاعتك ، طبعًا عشان المبرمج ما يمشيش شايل note ويقعد يكتب فيها address كل array او string بيعمله declare في الميموري ال assembler كان بيساعد شوية ويعوضلك عن ال address ده ب symbol
ال symbol ده بيبقى اسم عادي من حروف لما تكتبه لل assembler هيفهم انك عايز توصل ل address الداتا الفلانية بتاعتك ، وطبعًا كل piece of data بتميزها ب symbol مختلف،
ف بالتالي اقدر اوصل للداتا دي من اي مكان في الكود بس بإستخدام ال symbol وال assembler هيعوض عنه ب memory address
ف بالتالي اقدر اوصل للداتا دي من اي مكان في الكود بس بإستخدام ال symbol وال assembler هيعوض عنه ب memory address
ف قالك بس احنا نخلي نوع بيانات مخصوص يكون مختص انه يشيل address اي بيانات متخزنه في الميموري ويسهل الوصول ليها من اي scope في البرنامج كله.. بس هنسميه ايه؟ symbol برضوا ؟
قالك هنسميه pointer على اسم خاله
ومن هنا بدأت عقدة طلبة حاسبات وهندسة وعلوم كمبيوتر في العالم كله 😃
قالك هنسميه pointer على اسم خاله
ومن هنا بدأت عقدة طلبة حاسبات وهندسة وعلوم كمبيوتر في العالم كله 😃
ال pointer على قد انها كانت بت work as charm بالنسبة للكمبيوتر القديم ذو البرنامج الواحد الا انها اصبحت لعنة لما بدأت ال multi-programmes computer وبدأ يبقى فيه حاجة اسمها virtual memory ..
ف البوينتر ده قادر انه يوصل لعناوين برامج تانية على نفس الكمبيوتر او حتى كود ال OS
ف البوينتر ده قادر انه يوصل لعناوين برامج تانية على نفس الكمبيوتر او حتى كود ال OS
ويغير من القيم اللي متشاله في العناوين دي براحته ويدشمل الدنيا زي ما هو عايز لإن اللي بيطوروا اللغة سمحوله انه يشيل اي address لبيانات موجودة في اي scope خلقه ربنا
جات اللغات اللي بعد كده زي الجافا وغيرها قالك بس يا سيدي احنا مش هنقدر نستغنى عن فكرة ال symbol اه ولكن نحط ليها شوية rules عشان الدنيا ما تبقاش سايحة في بعض زي ال c
ومن هنا طلع فكرة ال reference variable اللي هو نفسه ال pointer ولكن لو جيت تحط جواه اي address هيقولك على جثتي😤
ومن هنا طلع فكرة ال reference variable اللي هو نفسه ال pointer ولكن لو جيت تحط جواه اي address هيقولك على جثتي😤
اتفضل سيادتك احجز مكان الاول لل object بتاعك جوا scope البرنامج وبعدين هاتلي ال address بتاعه اشيلهولك في الحفظ والصون او هاتلي address اوبجكت تاني محجوزله مساحة قبل كدة برضوا شغال.
لكن تديني address معرفش دينه ولا ملته ايه ما يمشيش معايا ، روح لل C خليها تنفعك🤡
لكن تديني address معرفش دينه ولا ملته ايه ما يمشيش معايا ، روح لل C خليها تنفعك🤡
نرجع بقى لل pointer to function
زي ما قولنا ان البوينتر بيشيل عنوان لبداية بيانات مخزنة في مكان بالميموري ، بغض النظر عن نوع البيانات دي ايه!
البويتر تو فانكشن بقى بيشيل عنوان برضوا ولكن لبداية مجموعة من الأوامر (instructions) (ومش بيانات المرادي)
زي ما قولنا ان البوينتر بيشيل عنوان لبداية بيانات مخزنة في مكان بالميموري ، بغض النظر عن نوع البيانات دي ايه!
البويتر تو فانكشن بقى بيشيل عنوان برضوا ولكن لبداية مجموعة من الأوامر (instructions) (ومش بيانات المرادي)
طيب هي مش دي وظيفة ال function اصلا ؟! بخزن شوية instructions تحت بعض وبحتفظ بعنوان اول انستركشايه فيهم ولما اعوز انفذ ال function دي اروح لأول address وافضل ماشي بالترتيب لحد ما الاقي انستركشايه ترجعني تاني لل scope بتاعي ؟
يعني كدا ال function هي في الحقيقة pointer ؟ 😟
يعني كدا ال function هي في الحقيقة pointer ؟ 😟
الحقيقة ان ال function او ال pointer to function هما الاتنين شيء واحد، نظريًا ..
بس عمليًا مش اوي .. طيب ازاي ؟
فاكرين فكرة ال symbol بتاعة ال assembler ؟
هنا ال compiler بيتسخدم نفس الفكرة مع الfunction, السطر اللي انت بتنادي فيه على function الكومبايلر بيشيله ويحط مكانه
بس عمليًا مش اوي .. طيب ازاي ؟
فاكرين فكرة ال symbol بتاعة ال assembler ؟
هنا ال compiler بيتسخدم نفس الفكرة مع الfunction, السطر اللي انت بتنادي فيه على function الكومبايلر بيشيله ويحط مكانه
امر بيخلي ال cpu يروح على اول Instruction في الfunction block اللي طبعًا هو اداله ال address بتاعها مع الأمر ..
فكدا في حاله ال function العادية الكومبايلر هو اللي محتفظ ب address بداية الكود
في حالة pointer to function بقى بنحفظ address بداية الكود جوا متغير في الميموري نفسها
فكدا في حاله ال function العادية الكومبايلر هو اللي محتفظ ب address بداية الكود
في حالة pointer to function بقى بنحفظ address بداية الكود جوا متغير في الميموري نفسها
ف لما نحب ننادي على ال function دي بنقول للكومبايلر شايف المتغير ده ؟ روحله هتلاقي جواه address لأنستركشايه موجودة في مكان ما !! روح نفذها ونفذ اللي كل اللي بعدها بالترتيب !!
ف بالتالي بما ان ال pointer ده متغير ف اقدر اشيل جواه address اي حاجة تانية حتى لو مكانتش instruction قابله للتنفيذ ؟
طيب ايه اللي هيحصل لو عملت كدة ؟
هيحصل fault او exception طبعًا اول ما تيجي تنادي على ال function اللي بيشاور عليها ال pointer لإنها مش function اصلا !!
طيب ايه اللي هيحصل لو عملت كدة ؟
هيحصل fault او exception طبعًا اول ما تيجي تنادي على ال function اللي بيشاور عليها ال pointer لإنها مش function اصلا !!
وكده ال error هيكون runtime 💀
لكن ده طبعًا عمره ما هيحصل في حالة ال function العادية .. لأن لو سيادتك ناديت على function مش موجود ليها definition الكومبايلر هيقولك ال symbol ده انا مش لاقيه في الجدول بتاعي ،، حضرتك متأكد انك كتبت كود الفانكشن؟
لكن ده طبعًا عمره ما هيحصل في حالة ال function العادية .. لأن لو سيادتك ناديت على function مش موجود ليها definition الكومبايلر هيقولك ال symbol ده انا مش لاقيه في الجدول بتاعي ،، حضرتك متأكد انك كتبت كود الفانكشن؟
طيب ليه فيه حاجة اسمها pointer to function في ال C ما دام هي هي ال function العادية ، وكمان الfunction العادية safe في استخدامها اكتر منه !!
طبعًا ده موضوع تاني لوحده، ولكن اللي يحب يسبق الاحداث ف يقدر يبحث عن معنى ال callBack او ال Up-Down approach
تمت
طبعًا ده موضوع تاني لوحده، ولكن اللي يحب يسبق الاحداث ف يقدر يبحث عن معنى ال callBack او ال Up-Down approach
تمت
جاري تحميل الاقتراحات...