لاحظ أن المتغير 1/883 يحجز (785ا 4) أربع أضعاف ما يحجزه (©/7ت 1) المتغير 1/8+1
ذلك لأن حجم نوع بيانات المتغير . 1/833 هو +1066 ويعادل أربع أضعاف حجم النمط
لكن البرنامج لا يعرف معنى 1/831 و 833 وإنما يعرف كل حيز من خلال عنوان.
إذن؛ كيف يحدد البرنامج موضع المتغيرات في الذاكرة؟
يحدد البرنامج موضع أي كائن (متغيرء ثابت؛ جدول؛ سجلّ ..ء إجراء ...) من خلال عنوان
(55©+800) أول خلية من الحيز الذي يشغله الكائن من الذاكرة.
والعنوان هو قيمة عددية يعبر عنها -اصطلاحا- بأعداد ست-عشرية؛ مثال: 76013
عند الإعلان عن متغير رقمي في دلفي يتم تهيئته بقيمة 0 إذا متغير عام ( و60
6ا8035/)؛ أما إذا كان متغير محلي ( . 8733516/ 0681) فلن يتم تهيئتها وستأخذ قيمة
عشوائية تمثل محتوى الحيز المشغول من الذاكرة لأجل المتغير.
المؤشر (م©00104) هو نوع من أنواع المتغيرات الرقمية حجمه 7/6 4 (تماما مثل النمط
ا68+0102)؛ غير أنه لا يستخدم لتخزين الهيانات وإنما لتخزين أرقام خانات من الذاكرة نسميها
حسناء كيف نحصل على عنوان المتغير 1/832 مثلا؟
نحصل في دلفي على عنوان أي كائن باستخدام الرمز . © أو التابع المضمن +800 لنشاهد
عنوان 1/832:
أو لعرضه بشكل أرقام ست-عشرية ([1630600021):
٠, 8( عدن عف2) ععوع 101 ) بعتاه 1017 ) و2 51101011655
استخدمنا التغليف ()+08886) لأن التوابع 1017051 و«ع107011 لا تقبل تمرير قيم مؤشرات
مباشرة؛ وطبعاء العنوان يختلف من جهاز إلى آخر ...
مجلة منتدى دلفي للعرب عساتدع11 مال
الآن؛ ماذا لو قمنا بتخزين عنوان المتغير 1/332 في متغير آخر 01/822 ؟
في هذه الحالة نقول أن المتغير 01/332 يؤشر على المتغير 1/332 ونمثل ذلك في الجدول:
المتغير 2م 2 2211لا
القيمة عنوان2 45 12
انتبه: المتغير 01/322 يسمى مؤشر (0010182) وهو لا يخزن قيمة المتغير 7882 وإنما
يحتمل 0010482 أو المؤشر قيم موجبة ( 00515080) -نظريا- من 0 إلى 4294967295
بالأعداد العشرية؛ أو بأرقام ست-عشرية: من 0 إلى ععععع8ع]ع]ع وهو نفس حجم البيانات
هل يمكننا الحصول على قيمة المتغير 1/832 من خلال المؤشر 22]ج/1م ؟
أجل؛ ببساطة نقرأ محتوى المتغير الذي عنوانه 01/3+2؛ وكأن المؤشر 01/332 يمثل مقبض
للمتغير 332/. يمكننا في دلفي قراءة المتغير الذي عنوانه قيمة المؤشر 2 بالرمز
علا
اس لي ملي
مجلة منتدى دلفي للعرب عستجدع11 مول
كما يمكننا تغيير قيمة المتغير 1/832 عبر مؤشره 01/2+22:
:©0104 00/080: أي المؤشرات التي لا تؤشر على نمط محدد؛ ويمكن استخدامها
للتأشير على أي كائن؛ وتعرف بالنوع :0061046 : .
“+©00101 17/060: وهي المؤشرات التي تستخدم للتأشير على نوع محدد من البيانات»
وتعرف بأحد أنواع البيانات يسبقه الرمز ى مثل: عصر8 تمععاماى عقطعى
معظم هذه الأنواع معرفة في دلفي مسبقا بلاحقة .م في المكتبة 51754801.025 وهي على
قمنا بتعريف مؤشر ( :+2010 : 217872) ليس له نمط محدد ( | 17017088
<©+2037)؛ لذلك استخدمنا هنا التغليف إلى 8(/8؛ لنخبر مترجم دلفي أن نوع القيمة التي
موضع القوس:
لتحديد نوع القيمة التي يؤشر عليها 01/28:2 نقوم بتعريف المؤشر بنوع مؤشر على 86/ر8:
ملاحظة: تغيير نوع البيانات الذي يؤشر عليه 07/832 لا يغير من حجم المؤشرء بعبارة أخرى
وزن المؤشر 01/222 سيبقى عار 4.
هل يمكننا إنشاء مؤشر على المؤشر 01/832 ؟
مجلة منتدى دلفي للعرب عساجدع11 81
طبعا وفق نفس المبداً:
عار :27/82
787 ج: (2عد7طط) معتملوط
بقي شيء أخير؛ بما +001048 هو نفسه +6ع108؛ إذن يمكننا تخزين عنوان متغير في متغير
لاء احذر +80104©8 ليس +0686! (رغم أنهما بنفس الحجم؛ تذكر أيضا أن . 10488683 مجال
يشمل قيم سالبة) وهذه الكتابة خاطئة:
عار ٠781:
إذن كيف يمكننا تخزين عنوان المتغير 1/331 في متغير عادي 1/32 ؟
ببساطة نقوم بالتغليف 0010480 إلى +1018886):
والأصح هنا أن يتم الإعلان عن المتغير 2م8/ بنوع 68301021 وليس 1048862
وللقراءة نخبر المترجم أن المتغير .1/862 يحتوي على عنوان وليس على عدد؛ يمكن ذلك
باستخدام تابع التحويل المضمن +84 والمعرف كما يلي:
مجلة منتدى دلفي للعرب عستتدعة11 يبال
ليكن 01/23 مؤشر على +100886. يمكننا إنشاء نسخة جديدة من +1/3| (عدد + 100886 جديد):
إنشاء نسخة جديدة// : (ع75) سع1ا
تحرير المؤشر//: (01787) 0150056
ملاحظة: لا يمكننا إنشاء نسخة من مؤشر 001048 000/080 على غير نوع محد سرعلا
و©015005 تستخدم مع مؤشرات على أنواع محددة +0101 17/060: 16ر08 أو
يمكننا إنشاء عدة نسخ باستخدام شبه-الإجراء علا (أو 056000-0002600) وفي كل مرة
نحصل على متغير جديد لا اسم له ( 5/ا80007000)؛ ولا يمكننا الوصول إليه إلا من خلال
يمكن استخدام 6610/8600 و 2661/1600ع لأداء نفس الغرض؛ غير أن هذين الإجراءين
عامين ولا يخصان نوع محدد من المؤشرات؛ والأفضل استخدام برعل و 056م015.
وإذا قمنا بإنشاء نسخة أخرى باستخدام نفس المؤشر (أو جعلناه يؤشر على متغير آخر 0
فسيضيع منا عنوان المتغير الأول وبالتالي لن نتمكن من الوصول إليه ولا القراءة منه
وسيسبب نزيف (أو تسرب) في الذاكرة 8210 /1/160000/) ويصبح حينها مؤشر يتيم؛ مثال:
هنا تضيع القيمة 67/5 حرج
سد لياه ملي
إلا إذا قمنا بحفظ عنوانه في مؤشر آخرء وفي مثل هذه الحالات يمكننا استعمال الصنف 7158
الذي يمكن استخدامه كجدول من المؤشرات:
ع8 :17876 علا
7 ح: اوراز
فصاع
لكن؛ إذا قمنا هنا بتحرير المؤشر 86/// (باستخدام 0150056) قبل عرض الناتج فسنضيع
القيمة 45 (مع اختلاف في نسخ دلفي 2006 فما فوق التي تسير الذاكرة بطريقة مختلفة)؛ مع
التنبيه إلى أن عدم تحرير المؤشر 1/7818 هنا يسبب نزيف في الذاكرة (يمكن فحص ذلك
بضبط المتغير 860011/16107101/16216500500180770 على القيمة 7006 في إصدارات
من استخدامات المؤشرات:
فهمك استخدام المؤشرات يجعلك تتحرر من قيود كثيرة تواجهها أثناء البرمجة بدلفي؛ يشعر
بهذه القيود بعض من يستخدم لغات برمجة لا تدعم استخدام المؤشرات.
استخدام المؤشرات يمنحك تحكم أكثر في اللغة ويكسر حدودك البرمجية؛ مثال:
نعلم أن المتغيرات ( 1/33185185) يمكن أن تأخذ قيم مختلفة أثناء تشغيل البرنامج؛ خلافا
مجلة منتدى دلفي للعرب عسادع11 ذل
+ و1016 :8126 لفلفلا عدلا تصق عصم كمف ) قمع وصقت نوعب دعم
عقل
اعبسلفلا ومتضعة معلا ج: معدلا
(وص50) 312605 ال ععقع172 را5ع00) لتقمم وطقط.
بما أن المؤشر هو متغير رقمي, فيمكن إجراء معظم العمليات عليه؛ إرفاق قيمة: 2م 2: 1م
الزيادة من قيمته: (م)10 أو الإنقاص منها: (م)066؛ مع التنبيه على أن زيادة قيمة المؤشر م
بمقدار 0 يعني إزاحة العنوان بمقدار: 0*«(حجم المتغير الذي يؤشر عليه م)؛ مثال:
تهيئة المؤشر بقيمة ابتدائية // ((0)550000 -: 8ط
8 - (علطوم) معز * 6 + 50008و ح 5 // ب( ,)عمد
لذلك شاع استخدام المؤشرات مع الجداول أو السلاسل النصية ضمن حلقة تكرارية؛ بالمرور
على جميع القيم من خلال التأشير على الخانة اللاحقة مع كل زيادة في قيمة المؤشر.
التمرير باستخدام قيمة (مؤشر) مرجعية:
في المثال الآتي نود تغيير قيمة المتغير « من خلال إجراء بدائي:
وق راع
(ي) عسل 2لا وفقط
طبعا لن تتغير قيمة # لأن التمرير في الإجراء ع0ا0080861/3 تم باستخدام القيمة» أي أن
قيمة المتغير أخذت قيمة » وقام الإجراء بتغيير قيمة ز إلى 0؛ بينما تبقى قيمة « على حالها.
طبعاء سنقول جميعا أن الحل سهل بإضافة التوجيه م8 (الذي يستخدم نفس المبداً):
+ و2016 11 ع12) عسل فلا وصقت 0066006
في لغات برمجة أخرى (لغة © مثلا) لا يوجد تمرير بهذه الطريقة؛ وبالتالي كان ينبغي تمرير
المؤشر عوضا عن قيمة المتغير ثم التعديل من خلال المؤشر» وهو ما يقابل في دلفي:
ب طاعع قطع : معقوع3) ااعناع تمعن 1م10 نوعاط
لاحظ الآن بعد أن قمنا بتمرير عنوان المتغير # إلى الإجراء ع0ا0080861/3 ليقوم هذا
الأخير بتغيير قيمة محتوى العنوان الذي يحمله المؤشر أ.
مجلة منتدى دلفي للعرب عساتدع11 مال
لماذا كل هذا ؟ ويمكننا حل المشكل باستخدام الموجه 788 بسهولة !
الأن هذا سيمنحك قدرات أخرى للتحكم أكثر في سلوك البرنامج؛ وسندرك أيضا لماذا عندما
نواجه استخدام بعض دوال 01م 10/100005
أيضا تعرف المؤشرات في لغة ع بإضافة نفس الرمز (*) الذي يستخدم للتأشير؛ مثال:
في دلفيء تم التفريق بين صيغة الاستخدام وبين صيغة التعريف:
عول
حاط
في دلفي غالبا ما تستخدم السجلات ( 8660305) من خلال مؤشر على السجل وفق نفس المبداً