فهم واستخدام المؤشرات في دلفي

click fraud protection

على الرغم من أن المؤشرات ليست مهمة في دلفي كما هي في C أو C ++، إنها أداة "أساسية" تتعلق بأي شيء تقريبًا برمجة يجب التعامل مع المؤشرات بطريقة ما.

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

المؤشر إلى نوع البيانات

ببساطة ، المؤشر عبارة عن متغير يحتفظ بعنوان أي شيء في الذاكرة.

لتأكيد هذا التعريف ، ضع في اعتبارك أن كل ما يستخدمه التطبيق يتم تخزينه في مكان ما في ذاكرة الكمبيوتر. نظرًا لأن المؤشر يحمل عنوان متغير آخر ، يُقال إنه يشير إلى هذا المتغير.

في معظم الأحيان ، تشير المؤشرات في Delphi إلى نوع معين:

فار
iValue ، j: عدد صحيح؛ pIntValue: ^ integer؛
ابدأ
iValue: = 2001 ؛ pIntValue: = @ iValue؛... j: = pIntValue ^؛
النهاية
;

ال بناء الجملة للإعلان عن نوع بيانات مؤشر يستخدم علامة الإقحام (^). في التعليمة البرمجية أعلاه ، iValue عبارة عن متغير نوع صحيح و pIntValue هو مؤشر نوع صحيح. نظرًا لأن المؤشر ليس أكثر من عنوان في الذاكرة ، فيجب علينا تعيين موقع (عنوان) القيمة المخزنة في متغير عدد صحيح iValue.

ال @ المشغل أو العامل

instagram viewer
إرجاع عنوان المتغير (أو دالة أو إجراء كما هو موضح أدناه). أي ما يعادل عامل التشغيل @ وظيفة ADR. لاحظ أن قيمة pIntValue ليست 2001.

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

لاحظ أنه عندما تظهر "^" بعد متغير المؤشر ، فإنه يلغي مراجعته ؛ بمعنى ، تقوم بإرجاع القيمة المخزنة في عنوان الذاكرة التي يحتفظ بها المؤشر. في هذا المثال ، يكون للمتغير j نفس قيمة iValue. قد يبدو أن هذا ليس له أي غرض عندما يمكننا ببساطة تعيين iValue على j ، لكن هذه الشفرة تكمن وراء معظم المكالمات إلى Win API.

مؤشرات لا شيء

المؤشرات غير المخصصة خطيرة. نظرًا لأن المؤشرات تتيح لنا العمل مباشرة مع ذاكرة الكمبيوتر ، إذا حاولنا (عن طريق الخطأ) الكتابة إلى موقع محمي في الذاكرة ، فقد نحصل على خطأ انتهاك وصول. هذا هو السبب في أنه ينبغي لنا دائمًا تهيئة مؤشر إلى NIL.

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

مؤشرات الشخصية

تمثل الأنواع الأساسية PAnsiChar و PWideChar مؤشرات إلى قيم AnsiChar و WideChar. يمثل PChar عام مؤشر إلى متغير Char.

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

مؤشرات إلى السجلات

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

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

اكتب
pNextItem = ^ TLinkedListItem
TLinkedListItem = سجلsName: سلسلة ؛ iValue: عدد صحيح NextItem: pNextItem؛
النهاية
;

الفكرة وراء القوائم المرتبطة هي منحنا إمكانية تخزين العنوان للعنصر المرتبط التالي في قائمة داخل حقل سجل NextItem.

يمكن أيضًا استخدام مؤشرات السجلات عند تخزين بيانات مخصصة لكل عنصر عرض شجرة ، على سبيل المثال.

الإجراءات الإجرائية والمؤشرات

مفهوم مؤشر آخر مهم في دلفي هو مؤشرات الأسلوب والطريقة.

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

مؤشر الأسلوب هو مؤشر يحتوي على معلومات حول كل من الاسم والكائن الذي يتم استدعاءه.

المؤشرات و Windows API

الاستخدام الأكثر شيوعًا للمؤشرات في Delphi هو التواصل مع رمز C و C ++ ، والذي يتضمن الوصول إلى Windows API.

شبابيك تستخدم وظائف API عددًا من أنواع البيانات التي قد لا تكون مألوفة لدى مبرمج Delphi. معظم المعلمات في استدعاء وظائف API هي مؤشرات لبعض أنواع البيانات. كما هو مذكور أعلاه ، نستخدم سلاسل منتهية بقيمة خالية في دلفي عند استدعاء وظائف واجهة برمجة تطبيقات Windows.

في كثير من الحالات ، عندما تقوم استدعاء API بإرجاع قيمة في مخزن مؤقت أو مؤشر إلى بنية بيانات ، يجب تخصيص هذه المخازن المؤقتة وهياكل البيانات بواسطة التطبيق قبل إجراء استدعاء API. مثال SHBrowseForFolder Windows API هو مثال واحد.

مؤشر وتخصيص الذاكرة

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

يجب أن تكون هذه الشفرة كافية لإثبات أن العمل مع المؤشرات ليس بالأمر الصعب كما قد يبدو في البداية. يتم استخدامه لتغيير النص (التسمية التوضيحية) لعنصر التحكم مع توفير المقبض.

إجراء GetTextFromHandle (hWND: THandle)؛
فار
pText: PChar؛ // مؤشر إلى char (انظر أعلاه)TextLen: عدد صحيح.
ابدأ

{الحصول على طول النص}
TextLen: = GetWindowTextLength (hWND) ؛
{ذاكرة الذاكرة}

GetMem (pText ، TextLen) ؛ // يأخذ المؤشر
{الحصول على نص عنصر التحكم}
GetWindowText (hWND ، pText ، TextLen + 1) ؛
{عرض النص}
ShowMessage (السلسلة (pText))
{حرر الذاكرة}
FreeMem (pText) ؛
النهاية
;
instagram story viewer