قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الاليقسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots
متابعون أخي الكريم ولكن بصمت ،، حتى لا نزعج الأخوة أثناء متابعة الدروس
لدي اقتراح ،، ربما الآن من خلال هذه الدروس الاساسية لن تكون هناك اسئلة ، ولكن مستقبلا حينما تتعمق في البرمجة أكثر حتما ستتبادر الاسئلة الى اذهان المتابعين ، فحبذا لو يتم فتح موضوع منفصل يخصص للاسئلة ويكون هذا الموضوع مرجعا للدروس فقط حتى لا ينشغل المتابعون بالردود الجانبية والاستفسارات
المؤشرات هى جزء مهم جدا من لغة السى ، وموضوع المؤشرات ربما يكون الجانب الأكثر إثارة للاهتمام والإفادة فى لغة السى . مفهوم المؤشرات قد يبدو غريبا لمعظم الدارسين الذين قاموا بالبرمجة باللغات رفيعة المستوى ، مثل الباسكال أو البيسك . المؤشرات مهمة ، وخاصة فى التطبيقات المستندة إلى الميكروكونترولر ، حيث أنها تمكن المبرمج من "الوصول مباشرة إلى مواقع الذاكرة" عن طريق استخدام "عناوين الذاكرة" .
المؤشرات متغيرات "تحفظ عناوين المتغيرات" بالذاكرة . ويتم إعلانها تماما مثل المتغيرات الأخرى ، ولكن "مع إدراج الحرف ( * ) أمام اسم مؤشر المتغير" . يمكن إنشاء المؤشرات للإشارة (أو حفظ عنوان) إلى متغيرات نوع الحروف char ، أو متغيرات نوع الأعداد الصحيحة int ، أو المتغيرات الطويلة long ، أو متغيرات الأعداد الحقيقية float ، وهلم جرا . بسبب هذا التعميم ينبغى علينا تحديد نوع المؤشر فى وقت إعلانه .
فى المثال التالى : ptr هو اسم مؤشر لمتغير نوع الحرف char ، بالذاكرة :
كود:
unsigned char *ptr;
فى هذه المرحلة كل ما نعرفه هو "أن المؤشر يمكن أن يحفظ عنوان لمتغير نوعه حرف" . ولكننا لم نحدد بعد "عنوان المتغير" الذى يحفظه . أى أنه حتى الآن ، علامة النجمة هنا لا تعنى سوى أن الاسم الذى يلها وهو ptr هو مؤشر (عنوان بالذاكرة) ليس إلا . النتيجة الفعلية : تنبيه المترجم بقدوم متغير نوع char وسوف تم تخزينه فى "العنوان" ptr بالذاكرة .
الآن يمكننا "تحديد اسم المتغير " الذى نرغب فى حفظ عنوانه . يتم فعل ذلك باستخدام الحرف ( & ) أمام اسم المتغير .
فى المثال التالى ، ptr يحفظ عنوان المتغير الحرفى Cnt بالذاكرة :
كود:
ptr = &Cnt;
يمكن الوصول لقيمة المتغير Cnt عن طريق استخدام الحرف ( * ) أمام مؤشره . وبالتالى فإن العبارتين التاليتين متكافئتين :
كود:
Cnt = 5; //Cnt = 5
*ptr = 5; //Set the value of the variable pointed to by ptr to 5
يمكننا أيضا عمل تخصيص بالشكل المبين أدناه ، لتخصيص قيمة للمتغير :
فى لغة السى يمكننا إجراء مختلف العمليات الحسابية على المؤشر ، والتى قد تنطوى على : • جمع أوطرح المؤشرات مع قيم إعداد صحيحة . • جمع أو طرح اثنين من المؤشرات . • المقارنو بين اثنين من المؤشرات . • مقارنة مؤشر مع الصفر NULL . • تخصيص أحد المؤشرات لمؤشر آخر . كمثال على العمليات الحسابية للمؤشرات ، افترض أن ستة مواقع ذاكرة ، بدءا من العنوان (1000) ، تخزن متغيرات نوع الحرف ، كما هو موضح بالشكل التالى :
يمكننا الآن إعلان مؤشر لحفظ عنوان المتغير (A) ومن ثم إجراء العمليات التالية :
كود:
char *ptr; //ptr is a character pointerptr = &A; //ptr holds address 1000ptr = ptr +2; //ptr now points to 1002*ptr = 25; //Variable C = 25ptr = ptr + 1; //ptr now points to 1003E = *ptr; //Variable E = 100ptr = ptr + 2; //ptr now points to 1005*ptr = 0; //Variable F = 0
• السطر الأول : إعلان مؤشر نوع حرف char باسم ptr . • السطر الثانى : نستبدل العامل (&) بالصيغة " عنوان ....." ، ومن ثم يمكن القول تخصيص قيمة "عنوان المتغير A " وهى (1000) للمؤشر ptr ومن ثم فإن هذا المؤشر فى هذه اللحظة سوف يشير إلى العنوان (1000) .
• السطر الثالث : جمع (2) على قيمة المؤشر ptr وحفظ النتيجة فى المؤشر ptr ، الآن المؤشر يشير إلى العنوان (1002) .
• السطر الرابع : نستبدل العامل (*) بالصيغة "المتغير المشار إليه بواسطة المؤشر..." ، وبالتالى يمكن القول ، تخصيص القيمة (25) إلى "المتغير المشار إلية بواسطة المؤشر ptr " وهو فى هذه الحالة المتغير ( C ) ليكون ( C = 25 ) .
• السطر الخامس : إضافة واحد إلى المؤشر ليصبح ptr = 1003 ليشير الآن إلى العنوان 1003 .
• السطر السادس : هنا نجد *ptr أى تخصيص "المتغير المشار إليه بواسطة المؤشر " وهو المتغير ( D ) إلى المتغير ( E ) فيصبح E = 100 .
• السطر السابع إضافة ( 2 ) إلى المؤشر لتصبح قيمته 1005 ويشير الأن إلى العنوان 1005 .
• السطر الثامن : تخصيص الصفر ( 0 ) إلى " المتغير المشار إليه بواسطة المؤشر الآن" وهو المتغير ( F ) ليصبح F = 0 .
الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:39 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)