hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
كيكاوس الأول سينوب
استمرت الرحلات التجارية الأوروبية والبيزنطيه إلى المدينة بعد نقلهت. واسماها كيكاوس باسم أرمني (هيتم رايس)، لتنظيم الاختلاط السكاني لليونانيين والأتراك. بين نيسان/أبريل وأيلول/سبتمبر في سنة 1215 أعيد بناء الجدران تحت إشراف المهندس اليوناني سيباستوس. وساهم خمسة عشر أميراً سلجوقياً في تغطية التكلفة. وتم تسجيل لوحة تذكارية على برج باللغة اليونانية والعربية قرب البوابة الغربية.
كيكاوس الأول الوفاة
وفي سنة 616هـ المُوافقة لِسنة 1219م تُوفي السُلطان كيكاوس بعد أن حكم ثمانية أعوام، وبعد وفاة كيكاوس اختار الأُمراء والأعيان شقيقه علاء الدين كيقُباد.
كيكاوس الأول ملاحظات
Bryer، Anthony؛ Winfield، David (1985). The Byzantine Monuments and Topography of the Pontos. Dumbarton Oaks. ج. vol. 1. ص. 71–72. مؤرشف من الأصل في 2021-01-26. {{استشهاد بكتاب}}: |المجلد= يحوي نصًّا زائدًا (مساعدة)
جوناثان لبنيكي
جوناثان لبنيكي (بالإنجليزية: Jonathan Lipnicki)‏ ممثل شاب، ولد في 22 أكتوبر 1990، بولاية كاليفورنيا الأمريكية. ذاع صيته بعد أداءه لأدوار عدة في أفلام هوليود كأفلام جيري ماغواير وستيوارت ليتل ولايك مايك
جوناثان لبنيكي حياته
ولد جوناثان لبنيكي في ويستلاك فيلاج، لوس أنجليس، كاليفورنيا وأبواه هما جوزيف وروندا (اسمها قبل الزواج:روزين) لبنيكي، لديه أخت أكبر منه سنا وهي ألكسيس. تعود جذور عائلة لبنيكي إلى أصول يهودية
مؤشر (برمجة)
المؤشر (بالإنجليزية: Pointer)‏ هو كائن في بعض لغات البرمجة يُخزَّن فيه عنوانًا لمتغير آخر. يشير المؤشر إلى عنوان الذاكرة المرتبط بالمتغير "b". يُمكن ملاحظة أن في هذا المخطط التفصيلي، تُستخدم بنية الحوسبة نفس مساحة العنوان والبيانات الأولية لكل من المؤشرات وغير المؤشرات، بيد انه هذه ليست هي القضية المُراد التطلع إليها.
يُعد المؤشر، في علوم الحاسب الآلي، هو أحد أنواع بيانات لغة البرمجة والذي ترجع قيمته بشكل مباشر إلى (أو «تُشير إلى») قيمة أخرى مُخزنة في مكان آخر في ذاكرة الحاسب الآلي مُستخدمة عنوانها. تحتل المؤشرات في لغات البرمجة عالية المستوى بشكلٍ فعال محل سجلات الأغراض العامة في لغات البرمجة ذات المستويات المتدنية مثل لغة التجميع والأكواد، بيد أنها قد تتواجد داخل الذاكرة المتوفرة.
مؤشر (برمجة)
مراجع المؤشر هي عبارة عن مكان في الذاكرة، ويُطلق على عملية الحصول على القيمة التي يُشير إليه المؤشر بـعملية تتبع المؤشر dereferencing. يُعتبر المؤشر تطبيقاً بسيطاً أقل إيجازاً لنوع بيانات المرجع الأكثر إيجازاً. تدعم مختلف لغات البرمجة بعضاً من أنواع المؤشرات، على الرغم من احتواء البعض منها على المزيد من القيود في استخدامها عن غيرها.
تُحسن المؤشرات إلى البيانات بشكل ملحوظ من أداء العمليات المتكررة مثل تمرير الحرفية وجداول البحث وجداول الرقابة وتراكيب (بنيات) الأشجار. تُعد المؤشرات في أغلب الأحيان وبشكل خاص أكثر توفيراً للوقت والمساحة وذلك خلال إجراء عمليات النسج وتتبع المؤشرات من ما هو عليه الحال عند إجراء عملية نسخ البيانات والولوج إليها إلى ما تُشير إليه المؤشرات.
مؤشر (برمجة)
تُستخدم المؤشرات أيضاً للاحتفاظ بعناوين نقاط الدخول لما يُطلق عليه الروتين الفرعي في البرمجة الإجرائية ولربط وقت التشغيل بمكتبات الربط الديناميكية التي يُرمز لها بالرمز (DLLS). تُستخدم المؤشرات إلى الوظائف في البرمجة كائنية التوجه (أو البرمجة غرضية التوجه) في ربط الوسائل، وغالباً ما يُستخدم ما يُطلق عليه اسم جداول الوسائل العملية virtual method tables.
.
في حين أن المؤشرات قد استخدمت لتمثل المراجع عموماً إلا أنها تنطبق بشكل أكثر ملاءمة على تراكيب البيانات التي تسمح لجهتها بوضوح للمؤشر بالمعالجة (بشكل حسابي عن طريق حساب المؤشر) بوصفه عنوان ذاكرة، وعلى النقيض منcookie أو الإمكانية capability حيث لا يستحيل ذلك. نظراً لإتاحة المؤشر لكل من الوصول الآمن والغير الآمن إلى عناوين الذاكرة، فان هناك بعض المخاطر المصاحبة لاستخدامها في الحالة الأخيرة بشكل خاص.
مؤشر (برمجة) تعريفات أساسية
البيانات الأولية (أو الأولية فحسب): هي أي وحدات بيانات يُمكن قراءتها أو كتابتها لذاكرة الحاسب الآلي باستخدام ولوج واحد للذاكرة (على سبيل المثال، كلاًّ من البايت والكلمة كلاهما من الأوليات).
تجميع البيانات (أو التجميع فحسب) هي عبارة عن مجموعة من الأوليات التي نُسقت بشكل منطقي في الذاكرة والتي تُعرض مُجمَّعة كوحدة بيانات واحدة (على سبيل المثال، يُمكن أن يتكون التجميع من ثلاثة من وحدات البايت مُنسقة منطقيًّا، القيم التي توضح الثلاث إحداثيات للإشارة في المساحة)؛ عندما يتألف التجميع كلياً من نفس النوع من الأوليات، يُمكن تسمية التجميع بـالمصفوفة array؛ بمعنى أن الكلمة الأولية ذات وحدات البايت المتعددة تُعد مصفوفة من وحدات البايت، وتستخدم بعض البرامج الكلمات بهذه الطريقة.
في سياق هذه التعريفات، يُعد البايت أصغر قيمة أولية؛ يُحدد كل عنوان ذاكرة بوحدة بايت مختلفة. يعتبر عنوان الذاكرة أول وحدة من وحدات البايت هو عنوان الذاكرة (أو عنوان الذاكرة الأساسي) لوحدات البايت بالكامل.
مؤشر (برمجة) تعريفات أساسية
مؤشر الذاكرة (أو المؤشر فحسب) هو أحد الأوليات، القيمة ما يُراد استخدامه كعنوان ذاكرة؛ يُقال أن المؤشر يُمثل عنوان الذاكرة. كما يُقال أن المؤشر يُشير إلى وحدات البايت [في الذاكرة] عندما تكون قيمة المؤشر هي وحدات البايت الخاصة بعنوان الذاكرة.
يُعرف المؤشر بشكل عام على انه أحد أنواع المراجع، ويُقال أن مراجع المؤشر تُخزن وحدات البايت في مكان ما في الذاكرة؛ ويجب للحصول على وحدات البايت هذه إتباع عملية تتبع المؤشر. وتعتبر الصفة التي تُميز المؤشرات عن أنواع المراجع الأخرى هي أن قيمة المؤشر يُمكن تفسيرها كعنوان الذاكرة، ويعتبر ذلك مفهوم «مُتدني المستوى».
تخدم المراجع كأحد مستويات الإجراءات غير المباشرة: تُحدد قيمة المؤشر أي من عناوين للذاكرة (أي من المعطيات) التي سوف تُستخدم في العمليات الحسابية. حيث تُمثل الإجراءات غير المباشرة جانباً جوهرياً من الخوارزميات، وغالباً ما يُعبر عن المؤشرات كأحد أنواع البيانات الأساسي في لغات البرمجة؛ في لغات البرمجة المُصنفة بشكلٍ ثابت (أو بشكلٍ قوي)، يُحدد نوع المؤشر نوع وحدات البايت إلى التي يُشير إليها المؤشر.
مؤشر (برمجة) استخدامها في تراكيب البيانات
يجب توافر مؤشرات للمساعدة في إدارة كيفية تنفيذ التراكيب والتحكم بها عند إعداد تراكيب البيانات مثل القوائم، والصفوف، والأشجار. تُعد مؤشرات البداية ومؤشرات النهاية ومؤشرات التكدس من أمثلة المؤشرات النموذجية. يُمكن لهذه المؤشرات أن تكون إما مطلقة absolute (العنوان المادي الفعلي أو العنوان الواقعي في الذاكرة الواقعية) أو النسبية relative (إزاحة من عنوان البداية المطلق («أساس») التي تستخدم فعلياً عدد أقل من وحدات البايت عنه من العنوان الكامل، ولكن عادة ما يتطلب ذلك عملية حسابية إضافية واحدة للوصول إلى الحل).
مؤشر (برمجة) استخدامها في تراكيب البيانات
يُمكن استخدام معادلين من وحدات البايت، يحتوي على 16 بايت، أعداد صحيحة، لتقديم معالجة نسبية لأكثر من 64 كيلو بايت من تراكيب البيانات. يُمكن أن يمتد ذلك إلى 128 كيلو بايت، أو 256 كيلو بايت، أو 512 كيلو بايت فإذا كان العنوان المُشار إليه لابد وأن يكون عند حد نصف كلمة، أو كلمة أو كلمة مزدوجة (لكن تتطلب عملية «تحويل يسار shift left» إضافية عملية بتwise – من خلال 1 أو 2 أو 3 بايت – وذلك من أجل ضبط المُعادل من خلال العامل المكون من 2 أو 3 أو 4 بايت وذلك قبل إضافته إلى العنوان الأساسي). يُفضل بوجه عام، على الرغم من احتواء مثل هذه الأنظمة على الكثير من المشكلات، وكذلك من اجل التيسير على المُبرمج، توافر مساحة العنوان المحددة.
يُمكن استخدام معادل بايت واحد، مثل قيمة ASCII العشرية للرموز (مثل X"29") للإشارة إلى قيمة صحيحة بديلة (أو مؤشر) في مصفوفة (مثل X"01"). يُمكن بهذه الطريقة أن تترجم الرموز على نحو كاف من «البيانات الأولية» إلى مؤشر متسلسل قابل للاستخدام ومن ثم إلى عنوان مطلق من دون جدول البحث.
مؤشر (برمجة) استخدامها في جداول التحكم
عادة ما تزيد جداول التحكم المُستخدمة في التحكم في تدفق البرنامج من استخدام المؤشرات. عادة ما تكون المؤشرات جزءاً لا يتجزأ من مدخل الجدول، كما انه يُمكن أن تُستخدم على سبيل المثال للإبقاء على نقاط الإدخال لإتمام عملية تنفيذ الروتين الفرعي، معتمدة في ذلك على عدة حالات محددة مُعرَّفة في مدخل الجدول ذاته. يُمكن فهرست المؤشرات ببساطة إلى أخرى منفصلة، لكن مرتبطة، تشكل الجداول مصفوفة من العناوين الفعلية أو العناوين نفسها (اعتماداً على بنيات وتراكيب لغة البرمجة المتوفرة). يُمكن كذلك استخدامها للإشارة (إلى الخلف) إلى مداخل الجدول السابقة (كما في حلقة المعالجة) أو إلى الإمام لتخطي بعض مداخل الجدول (كما في التحويل switch
أو الخروج «المبكر» من الحلقة). نظراً لهذا الغرض الأخير، يُمكن أن يُصبح «المؤشر» ببساطة رقم مدخل الجدول نفسه ويُمكن أن يتحول إلى عنوان فعلي من خلال عملية حسابية بسيطة.
مؤشر (برمجة) أصول المعمارية
المؤشرات هي عبارة عن فكرة تجريدية صغيرة جدا تحتل قمة إمكانيات المعالجة أو العنونة المُدعمة من قبل معظم المعماريات الحديثة. يُخصص أحد العناوين أو أحد المؤشرات الرقمية في أبسط المخططات لكل وحدة من وحدات الذاكرة في النظام، حيث تكون الوحدات إما البايت أو الكلمة، تُحول الذاكرة ككل بشكل فعال إلى مصفوفة كبيرة جداً. ومن ثم، إذا توفر لدينا العنوان، فسوف يُوفر النظام عملية لاستعادة القيمة المخزنة في وحدة الذاكرة في هذا العنوان (عادة ما تُستخدم أجهزة مسجلات الأغراض العامة).
مؤشر (برمجة) أصول المعمارية
عادة ما يكون المؤشر كبير بدرجة كافية لاحتواء المزيد من العناوين أكثر من وحدات الذاكرة الموجودة في النظام. يُقدم ذلك احتمالية محاولة البرنامج من الولوج إلى أحد العناوين الذي لا يتطابق مع أي من وحدات الذاكرة، ويرجع ذلك إما لعدم تثبيت مساحة كافية من الذاكرة (على سبيل المثال تخطي مدى الذاكرة المتوفرة) أو لعدم دعم المعمارية لمثل هذه العناوين. يُمكن أن يُطلق على الحالة الأولى، في بعض البرامج مثل معمارية أنتل x86، اسم خطأ التجزئة أو التخصيص segmentation fault (عادة ما تُختصر ب segfault). الحالة الثانية ممكنة في عمليات التنفيذ الحالية لـ AMD64، بحيث يصل طول المؤشرات إلى 64 بت ويصل امتداد العناوين إلى 48 بت فقط. هناك، يجب أن تتفق المؤشرات مع قواعد محددة (العناوين المُتعارف عليها canonical addresses)، لذا فانه في حالة تتبع المؤشر غير المُتعارف عليها، يظهر المعالج خطأ حماية عام.
مؤشر (برمجة) أصول المعمارية
على الصعيد الآخر، تحتوي بعض الأنظمة على المزيد من وحدات الذاكرة أكثر من ما تحتويه من عناوين. في هذه الحالة، يعمل نظام أكثر تعقيداً مثل أنظمة تخصيص أو تقطيع الذاكرة memory segmentation أو الصفحات المخزنة paging المُوظفة لاستخدام أجزاء مختلفة من الذاكرة في أوقات مختلفة. تدعم الأمثلة الأخيرة للمعمارية x86 إلى 36 بت من عناوين الذاكرة الفيزيائية، والتي نُظمت لمساحة العنوان الخطي 32 بت من خلال أجهزة الصفحات المخزنة أو التصفح PAE. لذا، يُمكن فقط الولوج إلى 1\16 من الذاكرة الكلية المتاحة في المرة الواحدة. ومثال آخر في نفس عائلة جهاز الحاسب الآلي كان وضع الحماية الـ 16 بايت من المعالج 80286، الذي يمكنه، على الرغم من دعم 16 ميجا بايت فقط من الذاكرة الفيزيائية، الولوج إلى 1جيجا بايت من الذاكرة التخيلية، ولكن مزيج من عنوان الـ 16 بيت والسجلات المجزأة جعلت ولوج أكثر من 64 كيلو بايت في ثقل بنية بيانات واحدة. قد تُصبح بعض قيود المؤشر الحسابي ANSI مناسبة لنماذج الذاكرة المجزأة لعائلة هذا المعالج.
دعمت بعض معماريات ذاكرة التخزين المُستخدمة في عمليات الإدخال والإخراج (memory-mapped I/O) والتي تُمكن بعض العناوين من الإشارة إلى وحدات من الذاكرة في حين تُشير أُخرى إلى مسجلات جهاز خاصة بأجهزة أخرى داخل الحاسب الآلي وذلك لتوفير واجهة متناسقة. تظهر بعض المفاهيم المشابهة مثل إزاحة الملف ومؤشرات المصفوفة ومراجع الكائن البعيد التي تخدم بعض من الأغراض المماثلة مثل العناوين لأنواع أخرى من الكائنات.
مؤشر (برمجة) الاستخدامات
تُدعم المؤشرات بشكل مباشر بدون وجود قيود في لغات برمجة مثل PL/I وC وC++ وPascal وأغلبية لغات التجميع. كما أنها تُستخدم بشكل أساس لتراكيب المراجع، والتي بدورها خطوة أساسية لبناء كل تراكيب البيانات تقريباً، تماماً كما يحدث في عملية تمرير البيانات بين الأجزاء المختلفة من البرنامج.
في اللغات البرمجة الوظيفية التي كثيراً ما تعتمد على القوائم، يتم التحكم بالمؤشرات والمراجع بشكل نظري من خلال اللغة باستخدام التراكيب الداخلية مثل cons.
عند التعامل مع المصفوفات، عادة ما تنطوي عملية البحث الحيوي على مرحلة تُدعى «حساب العنوان address calculation» والتي تتضمن بناء مؤشر كائن البيانات المطلوبة في المصفوفة. إذا كانت عناصر البيانات في المصفوفة لها الأطوال المخصصة من خلال طاقات ثنائية، عادة ما تكون هذه العمليات الحسابية أكثر كفاءة. كثيراً ما تستخدم البطانة أو الحشو Padding كآلية لضمان أن هذه هي الحالة المطلوبة، على الرغم من زيادة متطلبات الذاكرة. في تراكيب البيانات الأخرى، مثل القوائم المرتبطة، تستخدم المؤشرات كمراجع لربط أحد أجزاء التراكيب بالآخر.
مؤشر (برمجة) الاستخدامات
تستخدم المؤشرات لتمرير المعاملات باستخدام مراجع لها. ويكون هذا مفيداً إذا أراد المبرمج أن يكون تعديل الدالة للمعامل مرئيا للجزء الذي قام باستدعائها. ويُفيد ذلك أيضا في استرجاع العديد من القيم من الدالة.
يُمكن استخدام المؤشرات أيضاً الذاكرة المخصصة وغير المخصصة للمتغيرات الديناميكية والمصفوفات داخل الذاكرة. في أغلب الأحيان ما يتحول المتغير إلى كائن زائد عن الحاجة بعد تحقيق الغرض منه، فإن الإبقاء عليه إهداراً للذاكرة، ولذا فمن الأفضل عدم تخصيصه أو توزيعه (مستخدماً مرجع المؤشر الأصلي) عندما انتهاء الحاجة إليه. قد يؤدي عدم القيام بهذه الخطوة إلى تسرب الذاكرة memory leak (حيث تقل مساحة الذاكرة الفارغة بشكل تدريجي، أو في الحالات الخطير بشكل سريعً، ويرجع ذلك إلى تراكم أعداد كبير من قوالب الذاكرة).
مؤشر (برمجة) الاستخدامات
يقوم هذا بالإشارة إلى القيمة " money" كمؤشر إلى عدد صحيح. حيث أن محتويات الذاكرة لا تضمن ما هي القيمة المحتمل أن تحتويها في لغة السي C، لذا يجب الحرص على التأكد من أن العنوان الذي يُشير إليه " money" انه عنوان صحيح ومناسب. ولهذا السبب يُقترح في بعض الأحيان استهلال المؤشر بالقيمة NULL (مع ذلك، يُمكن لاستهلال المؤشرات تورية التحليل وإخفاء الأخطاء).
عند إتمام عملية تتبع أحد المؤشرات له القيمة NULL فسوف يحدث خطأ في التشغيل ويتوقف التنفيذ ويحدث ذلك عادة مع أخطاء التخصيص segmentation fault. وعقب الإعلان عن المؤشر فإن الخطوة المنطقية التالية هي جعله يشير إلى شيء ما.
ويقوم هذا بإسناد عنوان الذاكرة للمتغير الصحيح a إلى قيمة المؤشر " money "، على سبيل المثال إذا كان المتغير a مخزن في الذاكرة عند الموقع 0x8130 فستكون قيمة" money" هي 0x8130 بعد الإسناد. ولتتبع المؤشر يتم استخدام علامة النجمة * مرة أخرى:
مؤشر (برمجة) الاستخدامات
ويُشير مترجم الكود بأن يأخذ محتويات المؤشر money والتي هي 0x8130 وينتقل إلى ذلك العنوان ويعين القيمة المخزنة به إلى 8. a فسوف تتضح قيمته ب 8.
قد يتخلى هذا المثال بشكل أكثر وضوحاً ما إذا تم فحص الذاكرة بشكل مباشر. افترضاً أن a له عنوان الذاكرة 0x8130 و money له العنوان 0x8134، وافترضاً أيضا أن الحاسوب المستخدم هو حاسوب 32 بت حيث أن سعة نوع البيانات int هي 32 بت. فإن الشكل التالي هو ما سوف يظهر في الذاكرة بعد تنفيذ الكود التالي:
المؤشر ذو القيمة NULL المعروضة هنا هو 0x00000000. وبتعيين عنوان المتغير a للمؤشر money باستخدام مؤثر التعيين &
سيأخذ الحاسب الآلي محتويات المؤشر والتي هي 0x8130 وينتقل إلى ذلك العنوان ويعين القيمة 8 إلى ذلك الموقع ويكون الناتج في الذاكرة كما يلي:
وكما هو واضح فإن استدعاء قيمة المتغير a سوف ينتج القيمة 8 لأن التعليمة السابقة قامت بتعديل محتويات المتغير a عن طريق المؤشر money.
مؤشر (برمجة) الاستخدامات
تتم فهرسة المصفوفة في لغة السي C بشكل أساسي باستخدام المؤشر الحسابي، حيث أن معايير اللغة التي تتطلب أن يكون معادل إلى *(array+i). لذا يُمكن اعتبار المصفوفات كمؤشرات لمناطق متتابعة من الذاكرة (بدون أي فجوات)، والصيغة المُستخدمة للولوج إلى المصفوفات مماثلة لتلك التي يُمكن أن تُستخدم في عملية تتبع المؤشر، ومثال على ذلك يُمكن الإعلان عن المصفوفة array واستخدامها على النحو التالي:
بقوم هذا بحجز مكان خاص لخمسة أعداد صحيحة ويُطلق على هذا القالب اسم المصفوفة التي تعمل كمؤشر لهذا المكان. من الاستخدامات الشائعة أيضاً للمؤشرات هي الإشارة للذاكرة المحجوزة ديناميكياً باستخدام دالة malloc التي تُعيد قالب متصل من الذاكرة بحيث لا يقل حجمه عن الحجم المطلوب الذي يُمكن استخدامه كمصفوفة.
بينما معظم المؤثرات على المصفوفات والمؤشرات متكافئة إلا أنه من المهم الإشارة إلى أن دالة sizeof سوف تكون مختلف. في هذا المثال سوف تكون قيمة (المصفوفة) sizeof يُساوي 5*sizeof (int) (حجم المصفوفة)، بينما سوف تكون قيمة sizeof (ptr) تساوي sizeof (int) أي حجم المؤشر نفسه.
يُمكن الإعلان عن القيم الافتراضية للمصفوفة مثل:
مؤشر (برمجة) الاستخدامات
إذا افترضت أن المصفوفة array تقع في الذاكرة بدايةً من العنوان 0x1000 على جهاز الحاسب الآلي 32 بايت وترتيب البيانات داخله little-andian فسوف تحتوي الذاكرة على التالي: (كون القيم الموجودة في نظام عد السادس عشري hexadecimal، مثل تلك الموجودة في العناوين):
يُوضح الشكل خمسة أعداد صحيحة 1 و2 و3 و4 و5. تشغل هذه الأرقام الخمسة 32 بت (أي 4 بايت) ويًخزن كل منها البايت الأقل أهمية أولاً (وهذه هي بنية المعالجة المركزية little-endian) وتُخزن بشكل متتالي بدءً من العنوان 0x1000.
الصيغة المُستخدمة في لغة السي C مع المؤشرات هي:
يوضح المثال الأخير طريقة الولوج إلى محتويات المصفوفة. وتفتيتها:
على سبيل المثال: array[3] يترادف مع *(array+3) يعنى *(0x1000 +3*sizeof(int))، والذي يُعلن «تتبع القيمة المخزنة في 0x100C» في هذه الحالة تكون القيمة 0x0001.
فيما يلي مثال يوضح تعريف القوائم المرتبطة في لغة السي C.
مؤشر (برمجة) الاستخدامات
يُمكن ملاحظة أن تعريف المؤشر التكراري هذا هو نفسه تعريف المرجع التكراري من لغة البرمجة Haskell:
Data link a = Nil
|Cons a (link a)
Nil هي القائمة الفارغة و Cons هي (Link a) هي خلية cons من النوع a مع رابط آخر من النوع a.
مع ذلك التعريف باستخدام المراجع تُفحص ولا تستخدم قيم الإشارة التي تحتمل أن تكون مربكة. لهذا السبب، عادةً ما يتم التعامل مع هيكل البيانات في لغة C عن طريق وظائف التضمين، والتي فُحصت بعناية للتأكد من صحتها.
يُمكن استخدام المؤشرات لتمرير المتغيرات باستخدام مراجع لها، بما يسمح لقيمتها بأن تتغير، على سبيل المثال انظر إلى كود لغة C++ التالي:
تُستخدم المؤشرات في تخزين عناوين القوالب الذاكرة المخصصة ديناميكياً وإدارتها كذلك. كما تُستخدم مثل هذه القوالب أيضا في تخزين كائنات البيانات أو كائنات المصفوفات. توفر معظم اللغات المُنشاة المُنظمة واللغات غرضية التوجه مساحة من الذاكرة يُطلق عليها الكومة heap أو منطقة التخزين الحر، حيث يتم تخصيص الدوال ديناميكياً.
مؤشر (برمجة) الاستخدامات
يوضح مثال التالي لكود لغة السي C طريقة بناء الكائنات ديناميكياً طريقة تزويدها بالمراجع. تدعم مكتبة لغة السي C القياسية وظيفة دالة malloc() لتخصيص قوالب الذاكرة من الكومة heap. حيث تُسجل حجم الكائن بهدف تخصيصه على هيئة متغيرات ويُعيد المؤشر إلى قالب ذاكرة مقسم في شكل جديد بحيث يكون مُناسب لتخزين الكائن، أو تُعيد مؤشر null في حالة فشل عملية التخصيص.
يُوضح الكود التالي كيفية عدم تخصيص كائنات الذاكرة ديناميكياً أي إعادتها إلى الكومة heap أو منطقة التخزين الحر. تُوفر المكتبة القياسية للغة C وظيفة free() لعدم تخصيص كقالب الذاكرة المخصصة مسبقاً وإعادتها إلى الكومة heap.
\* عدم تخصيص مادة الكائن*\
void destroy_item(struct item *item) {
\* البحث عن مؤشر الكائن null *\
\* عدم تخصيص سلسلة الاسم المحفوظة داخل المادة *\
\* عدم تخصيص المادة نفسها *\
free(item);
}
يُمكن استخدام المؤشرات في بعض تراكيب وأبنية الحوسبة للمعالجة الذاكرة أو أجهزة الذاكرة المعنونة بشكل مباشر.
تُعد عملية تحديد عناوين للمؤشرات هي أحد الأدوات الهامة خلال برمجة المتحكمات الدقيقة أو المايكروكونترولر microcontrollers. فيما يلي مثال بسيط يُوضح مؤشر من نوع int وتهيئتها لعنوان نظام عد السداسي عشر hexademical وفي هذا المثال سوف تكون القيمة الثابتة هي 0x7FFF:
ظهر استخدام لغة BISO بهدف الوصول إلى إمكانيات الفيديو لأجهزة الحاسب الآلي في فترة منتصف الثمانينات بطيء السرعة. عادة ما تُستخدم التطبيقات ذات العرض المكثف للولوج إلى ذاكرة الفيديو CGA وذلك عن طريق تحويل قيمة نظام عد السداسي عشر hexademical الثابتة 0xB8000000 لمؤشر لمصفوفة تتكون من 80 من قيم -bit int 16 بالغير مُشار إليها. تتألف كل قيمة من كود ASCII في الخانة ذات الوزن المنخفض من وحدات البايت، والخانة ذات الألوان ذات وحدات البايت العالية. لذا، لوضع حرف "A" في الصف رقم 5 والعمود رقم 2 باللون الأبيض على الأزرق الساطع، يمكنك كتابة الكود كالتالي:
مؤشر (برمجة) المؤشرات والتحويل القسري
في العديد من اللغات، يوجد في بعض المؤشرات قيد إضافي ألا وهو أن الكائن المُشار إليه كائن من نوع خاص. على سبيل المثال، ربما يُعلن عن المؤشر للإشارة إلى عدد صحيح؛ لذا ستحاول اللغة منع المبرمج من الإشارة إلى كائنات الأعداد بخلاف العدد الصحيح، مثل الأرقام العشرية، والتخلص من بعض الأخطاء.
على سبيل المثال في لغة السي C
سيكون money مؤشر لعدد صحيح و bags ستكون مؤشر char. سوف يُظهر الناتج التالي تحذير مترجم بان «مهمة من نوع مؤشر غير متجانس» وفقاً للغة GCC
نظراً لإعلان money و bags بأنواع مختلفة. يجب توضيح رغبتك الفعلية في عمل المهمة عن طريق typecasting وتعني " كيفية تغيير نوع البيانات من نوع إلي نوع أخر وقت البرمجة بدون التقييد بنوع معين وبدون التغيير في قيمتها إلا في حالات معينة فقط.
للتوضيح " وذلك لمنع ظهور هذا التحذير للمترجم.
يُوضح ذلك تغيير أو تحويل مؤشر العدد الصحيح لـ money إلى مؤشر char والإشارة إلى bags.
يجب أن تحتفظ مسودة 2005 للمتطلبات القياسية للغة السي C التي تقوم بتحويل مؤشر مستمد من أحد الأنواع إلى نوع آخر على الحيادية الصحيحة لكلا النوعين (مؤشرات 6.3.2.3، par.7)
مؤشر (برمجة) المؤشرات والتحويل القسري
تضع حسابات المؤشرات في الحسبان حجم النوع في اللغات التي تُمكن المؤشر الحسابي في اللغات التي تُمكن المؤشر الحسابي. على سبيل المثال، ينتج عن إضافة عدد صحيح إلى المؤشر إلى ظهور مؤشر جديد يُشير إلى عنوان أعلى بمقدار مضاعفة هذا الرقم لحجم هذا النوع. يُمكننا ذلك من حساب عنوان عناصر المصفوفة لهذا النوع المحدد بسهولة ويُسر كما وُضح سابقاً في مثال مصفوفات لغة السي C. يجب على المبرمج أن يتوقع أن المؤشر الحسابي سيتم حسابه بطريقة مختلفة وذلك عند تحويله لأحد مؤشرات أحد الأنواع إلى مؤشر من نوع أخر من حجم مختلف. على سبيل المثال إذا بدأت مصفوفة في لغة السي C بmoney عند 0x2000 وsizeof(int) 4 بايت حيث sizeof(char) 1 بايت ومن ثم (money+1) سوف يُشير إلى 0x2004 ولكن سوف بُشير (bags+1) إلى 0x2001. ويُعد فقدان البيانات عند كتابة البيانات «الكبيرة» في محل البيانات «الصغيرة» من مخاطر التحويل القسري (على سبيل المثال bags[0]=65537;)، تظهر نتائج غير متوقعة عند تحويل القيم bit-shifting، ومشكلات المقارنة، خاصة مع القيم في مقابل القيم الغير موقعة.
مؤشر (برمجة) المؤشرات والتحويل القسري
تقوم بعض اللغات بتخزين معلومات نوع التشغيل التي يُمكن استخدامها للتأكد من أن هذه الأشكال الهامة صالحة في عملية التشغيل على الرغم من استحالة تحديدها أي من هذه الأشكال آمنة في آن واحد وذلك بوجه عام، في حين ترفض اللغات الأخرى القيمة التقريبية الغير قابلة للتغير من الأشكال الآمنة، أو لا تقبل أي منها على الإطلاق.
مؤشر (برمجة) زيادة مستوى أمان المؤشرات
تسمح المؤشرات بوقوع العديد من أخطار البرمجة ويرجع ذلك لسماحها لبرنامج بالولوج إلى الكائنات التي لم يُعلن عنها بوضوح من قبل. بيد أن السلطة التي توفرها كبيرة جداً لدرجة أنه يُمكن أن يكون من الصعب القيام ببعض مهام البرمجة في غيابها. لذا فقد اختلقت بعض اللغات كائنات لها بعض خصائص المؤشرات المفيدة في حين تجنب بعض ثغراتها pitfalls للمساعدة في التعامل مع مثل هذه المشكلات.
تواجه المؤشرات مشكلة رئيسية ألا وهي أنه أثناء معالجتها بشكل مباشر كأرقام، يُمكن تشكيلها للإشارة إلى العناوين غير المستخدمة أو إلى البيانات التي تستخدم لأغراض أخرى. العديد من اللغات، بما في ذلك معظم لغات البرمجة الوظيفية functional programming languages واللغات الأمرية الحديثة imperative languages مثل لغة Java إلي تستبدل المؤشرات بنوع أكثر تعقيداً من المرجع والذي عادة ما يُشار إليه ببساطة كالمرجع والذي يمكن استخدامه فقط للإشارة إلى الكائنات ولا تُعالج كأرقام لمنع هذا النوع من الأخطاء.
تُتناول فهرسة المصفوفة كحالة خاصة.
مؤشر (برمجة) زيادة مستوى أمان المؤشرات
يُطلق على المؤشر الذي لا يحتوي على أي عنوان محدد له اسم المؤشر البدائي wild pointer. يمكن لأي محاولة لاستخدام مثل هذه المؤشرات الغير مهيأة أن تؤدي إلى سلوك غير متوقع إما لأن القيمة المبدئية ليست عنوان صالح وإما لأن استخدامها يمكنه تدمير أجزاء أخرى من البرنامج. وغالباً ما تكون النتيجة ظهور خطأ التجزئة segmentation fault أو انتهاك قواعد التخزينstorage violation.
في الأنظمة تخصيص الذاكرة، من السهل بناء المؤشر التابع dangling pointer عن طريق عدم تخصيص منطقة الذاكرة التي تُشير إليها. يُعد هذا النوع من المؤشرات خطير ودقيق لأن منطقة الذاكرة الغير مخصصة يُمكنها أن تحتوي على نفس البيانات التي كانت بها قبل إلغاء تخصيصها ولكن يُمكن حينها إعادة تخصيصها والكتابة عليها من خلال استخدام كود غير متصل بها، غير معروف للكود السابق. يُزعم أن اللغات التي تحتوي على garbage collection تمنع هذا النوع من الأخطاء (حيث تتم عملية إلغاء التخصيص يتم بشكل تلقائي) ولكن لا تتم إزالة المؤشر نفسه بواسطة garbage collector ويمكن أن يشير إلى بيانات ذات صلة وغير متوقعة إذا أعيد استخدامها في أي وقت بعد إلغاء تخصيصها.
مؤشر (برمجة) زيادة مستوى أمان المؤشرات
تُدعم بعض اللغات مثل لغة C++ المؤشرات الذكية smart pointers والتي تستخدم نموذج مبسط من حساب المرجع للمساعدة في تتبع تخصيص الذاكرة الديناميكية بالإضافة إلى العمل كمرجع. في غياب حلقات المرجع، حيث يشير الكائن إلى نفسه بصورة غير مباشرة من خلال سلسلة من المؤشرات الذكية smart pointers, يلغي هذا على إمكانية المؤشرات التابعة dangling pointer وتسريبات الذاكرة. تدعم سلاسل Delphi حساب المرجع محلياً.
مؤشر (برمجة) مؤشر Null
غالباً ما يحتوي مؤشر Nullعلى قيمة محددة، ولكنها ليست بالضرورة أن تكون القيمة صفر، توضح أنه لا يشير إلى أي كائن. تُستخدم مؤشرات Null روتينياً، خاصة في لغة C ولغة C++ حيث يستخدم compile-time constant (بالرغم من تفضيل الأعداد الصحيح للصفر في لغة C++  إلا أن لغة C++0x أدخلت nullptr constant لاستخدامه كبديل)، لتوضيح ظروف مثل القصور في successor للكائن الأخير في القائمة المرتبطة linked list، مع الحفاظ على بنية متسقة لنقاط القائمة. هذا الاستخدام لمؤشرات Null يمكن مقارنتها مع أنواع nullable ومع قيم null في قواعد البيانات الارتباطية ومع قيم Nothing في option type. قد اخترعت مراجع Nullable من قبل C.A.R. Hoare في عام 1965 كجزء من لغة Algol W. وقد وصف Hoare اختراعه لاحقاً (2009) بأنه «خطأ بمليار دولار»:
مؤشر (برمجة) مؤشر Null
لقد أطلقت عليه خطأ المليار دولار الخاص بي. كان اختراع مرجع null في عام 1965. في هذا الوقت، كنت أصمم أول نظام النوع الشامل للمراجع في اللغة غرضية التوجه (ALGOL W). كان هدفي من ذلك هو التأكيد على أن كل استخدامات المراجع لابد وأن تكون آمنة، مع التحقق من التنفيذ التلقائي عن طريق المجمع. ولكن لم أستطع مقاومة الإغراءات لوضع مرجع null ببساطة لأن تنفيذه كان سهل جداً. أدى هذا إلى عدد لا يحصى من الأخطاء ونقاط الضعف ووقوع أعطال في النظام والتي ربما تسببت في مليار دولار من الألم والضرر في الأربعين سنة الماضية.