CALM/arwiki huggingface dataset:
درس في سنن النسائي.
شرح سلم الوصول لحافظ حكمي وفُرغ في مذكرة.
شرح الواسطية والطحاوية ولمعة الاعتقاد.
شرح نخبة الفكر في المصطلح، وسجل.
شرح زاد المستقنع.
شرح الداء والدواء.
كما شرح العديد من المتون العلمية ككتب محمد بن عبد الوهاب.
للشيخ العديد من النشاطات الدعوية والدورات العلمية فله دروس أسبوعية في عدد من المدن والقرى فمنها على سبيل المثال:
خطبة يا أمة محمد.
ألقى خالد الراشد خطبة عن النبي محمد بدأها بوصف النبي ثم عن تبليغه للرسالة وما تعرض له من أذى في تبليغ رسالة الإسلام إلى الأمة كافة، ثم تحدث الشيخ عن إهانة النصارى للنبي وقال: ، وطالب الأمة الإسلامية بالانتصار للنبي . وقد أصغى لخطبته الكثير من المسلمين وأخذت التصنيف الأعلى في موقع طريق الإسلام.
صادقت هيئة التميز في المملكة العربية السعودية على الحكم بسجن خالد الراشد خمس سنوات، ثم تضاعف الحكم عليه فأصبح 15 سنة، بعد أن حدث جدال بينه وبين القاضي. وكانت هناك محاولات لاستئناف الحكم من قبل عائلته، لكن هيئة التمييز أيدت الحكم الصادر، الأمر الذي أغضب خالد الراشد ودخل في نقاش حاد مع القاضي والذي أصدر قراراً بمضاعفة مدة سجنه إلى خمسة عشر سنة. وفي سبتمبر 2020 أتم خالد الراشد مدة حبسه، لكن لم يُفرَجْ عنه حتى الآن وسط مطالبات بالإفراج عنه.
الأرزية السيبيرية نوع شجري يتبع جنس الأرزية من الفصيلة الصنوبرية.
موطنه غرب سيبيريا.
الأرزية الأوروبية نوع شجري يتبع جنس الأرزية من الفصيلة الصنوبرية.
موطنه جبال أوروبا.
الأرزية الغملينية نوع شجري يتبع جنس الأرزية من الفصيلة الصنوبرية.
موطنه شرق آسيا من شرق سيبيريا إلى شمال شرق الصين وكوريا الشمالية.
الأرزية الغربية نوع شجري يتبع جنس الأرزية من الفصيلة الصنوبرية.
موطنه شمال غرب الولايات المتحدة (ولايات أوريغون وواشنطن وإيداهو ومونتانا) وجنوب غرب كندا (مقاطعتي كولومبيا البريطانية وألبرتا).
أرزية الهملايا نوع شجري يتبع جنس الأرزية من الفصيلة الصنوبرية.
موطنه جبال الهملايا في التبت ونيبال.
كيكاوس الأول هو عز الدين كيكاوس بن كيخسرو سلطان من سلالة سلاجقة الروم والابن الأكبر لكيخسرو الأول تولى السلطنة من عام 1211 إلى عام 1220.
في عهد هذا السُلطان افتُتحت مدينة سينوپ ممَّا أكسب السلاجقة منفذًا على بحر البنطس، وأُخضعت مملكة قيليقية الأرمنيَّة بِفضل القُدرة العسكريَّة الهائلة لِلسلاجقة والتي رأى الأرمن أنْ لا قِبل لهم بِمُقاومتها، فأعلن الملك ليون الثاني طاعته التامَّة لِلسُلطان، وضاعف لهُ الخَراج السنويّ، وسلَّمه حصنَيْ لؤلؤة ولوزاد الحُدُوديين، اللذين يتحكَّمان بِالممرَّات القيليقيَّة.
ترك بعد وفاته سلطنةً قويَّةُ يسودها الأمن ويعُمُّها الرخاء، وذلك بِفضل الجيش النظامي الذي اعتمد عليه لِرد الاعتداءات الخارجيَّة وإحلال الأمن في الداخل والتوسُّع على حساب جيرانه، وتحسَّنت في عهده الحياة التجاريَّة، وانتشرت المهن بين السلاجقة، وازدهرت الحياة الزراعيَّة، وعمَّ الرخاء سائر المُقاطعات والمُدُن بِفضل شبكة الطُرُق التجاريَّة الآمنة، وأضحت سلطنة سلاجقة الروم ذات قُوَّة اقتصاديَّة هائلة.
بعد وفاة والده كيخسرو الأولى سنة 1211 في معركة العشير، تحدى أخويه إبراهيم كايفيدرون و كيقباد الأول توليه العرش. وقد حصل كيقباد الأول في البداية على دعم الدول المجاورة مثل عمه حاكم أرضروم وليو الأول ملك أرمينيا. وفي نفس الوقت سعى كايفيدرون إلى دعم فرنجة قبرص وقد عرض ميناء أنطاليا واذي اكتسبه لخطرهم. أما كيكاوس فقد دعمه معظم الأمراء وأرستقراطية السلاجقة وانطلق من قاعدته في ملطية ليستولي على كايسيري ثم قونية. مما حمل ليو على تغير رأيه، مما أضطر كايكوباد إلى الفرار والتحصن في أنقرة، حيث طلب المعونة من قبائل التركمان كاستامونو. ولم يلبث أن ألقى كيكاوس القبض على كل من إخويه وتأمين العرش لنفسه.
عقد كيكاوس خلال هذا الوقت الخطر، على تسوية سلمية مع ثيودور الأول لاسكاريس، إمبراطور الإمبراطورية البيزنطية في نيقية. هذه المعاهدة كانت بمثابة نهاية للأعمال العدائية بين دولة سلاجقة الروم وإمبراطورية نيقية، وأن كان البدو الرحل التركمان واصلوا أحياناً مشاكل حدودية مع البيزنطيين.
أمن كيكاوس أنطاليا بعلاقات سلام مع الغرب. وتحول اهتمام كيكاوس إلى الشرق. وسمح للحملة الصليبية الخامسة بالمرور مما أجبر الأيوبيين على خوض صراع على جبهتين.
عندما أرسل الغرب الأوروبي حملته الصليبية الثالثة كان الإمبراطور الألماني فريدريك بربروسا أحد المشاركين فيها، وحتى يمهد لحملته أرسل رسائل للملوك والأمراء والسلاطين الذين سوف تجتاز حملته بلادهم، ومنهم السلطان قلج أرسلان الثاني، الذي رد عليه يعده بالمساعدة، في حين قام الإمبراطور البيزنطي بإرسال بعثة إلى ألمانيا تعد باجتياز الحملة الأراضي البيزنطية، وفي الوقت نفسه أدت مخاوفه إلى سعيه لمحالفة صلاح الدين ضد فريدريك وقلج، فتعهد له صلاح الدين بوضع الأماكن المقدسة النصرانية في بلاد الشام تحت رعاية رجال الدين الأرثوذكس. عندما وصل الإمبراطور فريدريك البلقان أرسل الإمبراطور البيزنطي رسالة لصلاح الدين تعده بعدم تمكينه من عبور بلاده، لكن فريدريك اجتاز الأراضي البيزنطية ووصل داخل هضبة الأناضول السلجوقية، وقام قلج بتزويد الجيش الألماني بالمؤن وحراستها داخل الأراضي السلجوقية حتى وصلت الحملة أرض الشام. فلما آلت السلطة السلجوقية لعز الدين كيكاوس في عهد الملك الأيوبي العادل، طمع بالسيطرة على حلب، فأرسل جيش تقابل مع الجيش الأيوبي على مشارف حلب، انتهت المعركة بهزيمة السلاجقة، فقام عز الدين بسحب جيشه واسترد الجيش الأيوبي بلدة تل باشر ورعبان وتل خالد وبرج الرصاص التي خسرها قبل معركة حلب.
سينوب.
تعتبر السيطرة على سينوب من أهم انجازات كيكواس لدولة السلاجقة وهو ميناء على البحر الأسود سينوب. في سنة 1214 أسر رجال قبائل تركمانية ألكسيوس الأول إمبراطور طرابزون، في رحلة صيد له خارج مدينة. سلم الأسير إلى السلطان، وبدأ التفاوض على حريته مقابل سينوب وباقطاعية من إقليم طرابزون الشرقي. لينجح السلاجقة في اكتساب منفذاً بحرياً على البحر الأسود إضافة إلى المنفذ على البحر الأبيض المتوسط عن طريق أنطاليا، وكانت الإسفين مدفوعًا بين إمبراطورية طرابزون وإمبراطورية نيقية البيزنطية. وقد تأثر النقل يوم الأحد، 1 تشرين الثاني/نوفمبر مع السلطان و "كومنينوس" الحالي. تم ترفيه أليكسيوس الذي تمت استضافته لعدة أيام وبعد ذلك طلب العودة إلى إمبراطورية طرابزون.
استمرت الرحلات التجارية الأوروبية والبيزنطيه إلى المدينة بعد نقلهت. واسماها كيكاوس باسم أرمني (هيتم رايس)، لتنظيم الاختلاط السكاني لليونانيين والأتراك. بين نيسان/أبريل وأيلول/سبتمبر في سنة 1215 أعيد بناء الجدران تحت إشراف المهندس اليوناني سيباستوس. وساهم خمسة عشر أميراً سلجوقياً في تغطية التكلفة. وتم تسجيل لوحة تذكارية على برج باللغة اليونانية والعربية قرب البوابة الغربية.
وفي سنة 616هـ المُوافقة لِسنة 1219م تُوفي السُلطان كيكاوس بعد أن حكم ثمانية أعوام، وبعد وفاة كيكاوس اختار الأُمراء والأعيان شقيقه علاء الدين كيقُباد.
جوناثان لبنيكي ممثل شاب، ولد في 22 أكتوبر 1990، بولاية كاليفورنيا الأمريكية. ذاع صيته بعد أداءه لأدوار عدة في أفلام هوليود كأفلام جيري ماغواير وستيوارت ليتل ولايك مايك
ولد جوناثان لبنيكي في ويستلاك فيلاج، لوس أنجليس، كاليفورنيا وأبواه هما جوزيف وروندا (اسمها قبل الزواج:روزين) لبنيكي، لديه أخت أكبر منه سنا وهي ألكسيس. تعود جذور عائلة لبنيكي إلى أصول يهودية
المؤشر هو كائن في بعض لغات البرمجة يُخزَّن فيه عنوانًا لمتغير آخر. يشير المؤشر إلى عنوان الذاكرة المرتبط بالمتغير "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 (حيث تقل مساحة الذاكرة الفارغة بشكل تدريجي، أو في الحالات الخطير بشكل سريعً، ويرجع ذلك إلى تراكم أعداد كبير من قوالب الذاكرة).
المؤشر في لغة السي "C ".
الصيغة الأساسية للإعلان عن مؤشر هي:
int *money;
يقوم هذا بالإشارة إلى القيمة " money" كمؤشر إلى عدد صحيح. حيث أن محتويات الذاكرة لا تضمن ما هي القيمة المحتمل أن تحتويها في لغة السي C، لذا يجب الحرص على التأكد من أن العنوان الذي يُشير إليه " money" انه عنوان صحيح ومناسب. ولهذا السبب يُقترح في بعض الأحيان استهلال المؤشر بالقيمة NULL (مع ذلك، يُمكن لاستهلال المؤشرات تورية التحليل وإخفاء الأخطاء).
int *money = NULL;
عند إتمام عملية تتبع أحد المؤشرات له القيمة NULL فسوف يحدث خطأ في التشغيل ويتوقف التنفيذ ويحدث ذلك عادة مع أخطاء التخصيص segmentation fault. وعقب الإعلان عن المؤشر فإن الخطوة المنطقية التالية هي جعله يشير إلى شيء ما.
int a = 5;
money = &amp;a;
ويقوم هذا بإسناد عنوان الذاكرة للمتغير الصحيح a إلى قيمة المؤشر " money "، على سبيل المثال إذا كان المتغير a مخزن في الذاكرة عند الموقع 0x8130 فستكون قيمة" money" هي 0x8130 بعد الإسناد. ولتتبع المؤشر يتم استخدام علامة النجمة * مرة أخرى:
ويُشير مترجم الكود بأن يأخذ محتويات المؤشر money والتي هي 0x8130 وينتقل إلى ذلك العنوان ويعين القيمة المخزنة به إلى 8. a فسوف تتضح قيمته ب 8.
قد يتخلى هذا المثال بشكل أكثر وضوحاً ما إذا تم فحص الذاكرة بشكل مباشر. افترضاً أن a له عنوان الذاكرة 0x8130 و money له العنوان 0x8134، وافترضاً أيضا أن الحاسوب المستخدم هو حاسوب 32 بت حيث أن سعة نوع البيانات int هي 32 بت. فإن الشكل التالي هو ما سوف يظهر في الذاكرة بعد تنفيذ الكود التالي:
المؤشر ذو القيمة NULL المعروضة هنا هو 0x00000000. وبتعيين عنوان المتغير a للمؤشر money باستخدام مؤثر التعيين &amp;
يكون الناتج في الذاكرة كما يلي:
Then by dereferencing codice_1 by coding
*money = 8;
سيأخذ الحاسب الآلي محتويات المؤشر والتي هي 0x8130 وينتقل إلى ذلك العنوان ويعين القيمة 8 إلى ذلك الموقع ويكون الناتج في الذاكرة كما يلي:
وكما هو واضح فإن استدعاء قيمة المتغير a سوف ينتج القيمة 8 لأن التعليمة السابقة قامت بتعديل محتويات المتغير a عن طريق المؤشر money.
مصفوفات لغة السي C.
تتم فهرسة المصفوفة في لغة السي C بشكل أساسي باستخدام المؤشر الحسابي، حيث أن معايير اللغة التي تتطلب أن يكون معادل إلى *(array+i). لذا يُمكن اعتبار المصفوفات كمؤشرات لمناطق متتابعة من الذاكرة (بدون أي فجوات)، والصيغة المُستخدمة للولوج إلى المصفوفات مماثلة لتلك التي يُمكن أن تُستخدم في عملية تتبع المؤشر، ومثال على ذلك يُمكن الإعلان عن المصفوفة array واستخدامها على النحو التالي:
int array[5]; /* Declares 5 contiguous (per Plauger Standard C 1992) integers */
int *ptr = array; /* Arrays can be used as pointers */
ptr[0] = 1; /* Pointers can be indexed with array syntax */
2[array] = 4; /* Subscript operator is commutative */
بقوم هذا بحجز مكان خاص لخمسة أعداد صحيحة ويُطلق على هذا القالب اسم المصفوفة التي تعمل كمؤشر لهذا المكان. من الاستخدامات الشائعة أيضاً للمؤشرات هي الإشارة للذاكرة المحجوزة ديناميكياً باستخدام دالة malloc التي تُعيد قالب متصل من الذاكرة بحيث لا يقل حجمه عن الحجم المطلوب الذي يُمكن استخدامه كمصفوفة.
بينما معظم المؤثرات على المصفوفات والمؤشرات متكافئة إلا أنه من المهم الإشارة إلى أن دالة sizeof سوف تكون مختلف. في هذا المثال سوف تكون قيمة (المصفوفة) sizeof يُساوي 5*sizeof (int) (حجم المصفوفة)، بينما سوف تكون قيمة sizeof (ptr) تساوي sizeof (int) أي حجم المؤشر نفسه.
يُمكن الإعلان عن القيم الافتراضية للمصفوفة مثل:
int array[5] = {2,4,3,1,5};
إذا افترضت أن المصفوفة 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.
فيما يلي مثال يوضح تعريف القوائم المرتبطة في لغة السي C.
/* القائمة المرتبطة الفارغة تمثل باستخدام NULL أو قيمة إشارة أخرى */
struct link {
void *data; /* بيانات هذا الكائن */
الموقع التالي *next; /* الكائن التالي؛ EMPTY_LIST قائمة فارغة إذا كان الأخير */
يُمكن ملاحظة أن تعريف المؤشر التكراري هذا هو نفسه تعريف المرجع التكراري من لغة البرمجة Haskell:
Data link a = Nil
Nil هي القائمة الفارغة و Cons هي (Link a) هي خلية cons من النوع a مع رابط آخر من النوع a.
مع ذلك التعريف باستخدام المراجع تُفحص ولا تستخدم قيم الإشارة التي تحتمل أن تكون مربكة. لهذا السبب، عادةً ما يتم التعامل مع هيكل البيانات في لغة C عن طريق وظائف التضمين، والتي فُحصت بعناية للتأكد من صحتها.
التمرير باستخدام المؤشرات.
يُمكن استخدام المؤشرات لتمرير المتغيرات باستخدام مراجع لها، بما يسمح لقيمتها بأن تتغير، على سبيل المثال انظر إلى كود لغة C++ التالي:
/* a copy of the int n is changed */
void not_alter(int n) {
n = 360;
/* the actual variable passed (by address) is changed */
void alter(int *n) {
*n = 120;
void func(void) {
int x = 24;
/*pass x's address as the argument*/
alter(&amp;x);
/* x now equal to 120 */
not_alter(x);
/* x still equal to 120 */
تخصيص الذاكرة الديناميكية.
تُستخدم المؤشرات في تخزين عناوين القوالب الذاكرة المخصصة ديناميكياً وإدارتها كذلك. كما تُستخدم مثل هذه القوالب أيضا في تخزين كائنات البيانات أو كائنات المصفوفات. توفر معظم اللغات المُنشاة المُنظمة واللغات غرضية التوجه مساحة من الذاكرة يُطلق عليها الكومة heap أو منطقة التخزين الحر، حيث يتم تخصيص الدوال ديناميكياً.
يوضح مثال التالي لكود لغة السي C طريقة بناء الكائنات ديناميكياً طريقة تزويدها بالمراجع. تدعم مكتبة لغة السي C القياسية وظيفة دالة malloc() لتخصيص قوالب الذاكرة من الكومة heap. حيث تُسجل حجم الكائن بهدف تخصيصه على هيئة متغيرات ويُعيد المؤشر إلى قالب ذاكرة مقسم في شكل جديد بحيث يكون مُناسب لتخزين الكائن، أو تُعيد مؤشر null في حالة فشل عملية التخصيص.
/* مادة مخزون الأجزاء */
struct Item {
int id; /* رقم الجزء */
char * name; /* اسم الجزء */
float cost; /* التكلفة */
/* تخصيص وتهيئة مادة جديدة */
struct Item * make_item(const char *name) {
struct Item * item;
/* تخصيص مادة كائن جديد وإعادة شكله */
item = malloc(sizeof(struct Item));
if (item == NULL)
return NULL;
/* تهيئة أعضاء البند الجديد */
memset(item, 0, sizeof(struct Item));
item-&gt;id = -1;
item-&gt;name = NULL;
item-&gt;cost = 0.0;
/* احفظ نسخة من الاسم في البند الجديد */
item-&gt;name = malloc(strlen(name) + 1);
if (item-&gt;name == NULL) {
free(item);
strcpy(item-&gt;name, name);
/* إعادة مادة الكائن المُضاف حديثاً */
return item;
يُوضح الكود التالي كيفية عدم تخصيص كائنات الذاكرة ديناميكياً أي إعادتها إلى الكومة heap أو منطقة التخزين الحر. تُوفر المكتبة القياسية للغة C وظيفة free() لعدم تخصيص كقالب الذاكرة المخصصة مسبقاً وإعادتها إلى الكومة heap.
\* عدم تخصيص مادة الكائن*\
void destroy_item(struct item *item) {
\* البحث عن مؤشر الكائن null *\
\* عدم تخصيص سلسلة الاسم المحفوظة داخل المادة *\
if (item-&gt;name != NULL) {
free(item-&gt;name);
\* عدم تخصيص المادة نفسها *\
أجهزة الذاكرة المعنونة.
يُمكن استخدام المؤشرات في بعض تراكيب وأبنية الحوسبة للمعالجة الذاكرة أو أجهزة الذاكرة المعنونة بشكل مباشر.
تُعد عملية تحديد عناوين للمؤشرات هي أحد الأدوات الهامة خلال برمجة المتحكمات الدقيقة أو المايكروكونترولر microcontrollers. فيما يلي مثال بسيط يُوضح مؤشر من نوع int وتهيئتها لعنوان نظام عد السداسي عشر hexademical وفي هذا المثال سوف تكون القيمة الثابتة هي 0x7FFF:
int *hardware_address = (int *)0x7FFF;
ظهر استخدام لغة BISO بهدف الوصول إلى إمكانيات الفيديو لأجهزة الحاسب الآلي في فترة منتصف الثمانينات بطيء السرعة. عادة ما تُستخدم التطبيقات ذات العرض المكثف للولوج إلى ذاكرة الفيديو CGA وذلك عن طريق تحويل قيمة نظام عد السداسي عشر hexademical الثابتة 0xB8000000 لمؤشر لمصفوفة تتكون من 80 من قيم -bit int 16 بالغير مُشار إليها. تتألف كل قيمة من كود ASCII في الخانة ذات الوزن المنخفض من وحدات البايت، والخانة ذات الألوان ذات وحدات البايت العالية. لذا، لوضع حرف "A" في الصف رقم 5 والعمود رقم 2 باللون الأبيض على الأزرق الساطع، يمكنك كتابة الكود كالتالي:
void foo() {
VID[4][1] = 0x1F00 | 'A';