المؤشرات في لغة C سهلة وممتعة للتعلم. يتم تنفيذ بعض مهام برمجة لغة سي بسهولة أكبر باستخدام المؤشرات ، بينما لا يمكن تنفيذ مهام أخرى ، مثل تخصيص الذاكرة الديناميكي ، بدون استخدام المؤشرات. لذلك يصبح من الضروري تعلم المؤشرات لتصبح مبرمج سي مثالي. لنبدأ في تعلمهم بخطوات بسيطة وسهلة.
كما تعلم ، كل متغير هو موقع ذاكرة وكل موقع ذاكرة له عنوانه المحدد والذي يمكن الوصول إليه باستخدام عامل علامة العطف (&) ، والذي يشير إلى عنوان في الذاكرة. خذ بعين الاعتبار المثال التالي ، الذي يطبع عنوان المتغيرات المحددة -
#include <stdio.h> int main () { int var1; char var2[10]; printf("Address of var1 variable: %x\n", &var1 ); printf("Address of var2 variable: %x\n", &var2 ); return 0; }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
Address of var1 variable: bff5a400 Address of var2 variable: bff5a3f6
ما هي المؤشرات؟
و المؤشر هو متغير قيمته هو عنوان متغير آخر، أي عنوان المباشر من موقع الذاكرة. مثل أي متغير أو ثابت ، يجب أن تعلن عن مؤشر قبل استخدامه لتخزين أي عنوان متغير. الشكل العام لإعلان متغير المؤشر هو -
type *var-name;
هنا ، النوع هو نوع قاعدة المؤشر ؛ يجب أن يكون نوع بيانات C صالحًا وأن يكون var-name هو اسم متغير المؤشر. العلامة النجمية * المستخدمة للإعلان عن المؤشر هي نفس العلامة النجمية المستخدمة في الضرب. ومع ذلك ، في هذا البيان ، يتم استخدام علامة النجمة لتعيين متغير كمؤشر. ألق نظرة على بعض إعلانات المؤشر الصالحة -
int *ip; /* pointer to an integer */ double *dp; /* pointer to a double */ float *fp; /* pointer to a float */ char *ch /* pointer to a character */
نوع البيانات الفعلي لقيمة جميع المؤشرات ، سواء كان عددًا صحيحًا أو عددًا عائمًا أو حرفًا أو غير ذلك ، هو نفسه ، وهو رقم سداسي عشري طويل يمثل عنوان ذاكرة. الاختلاف الوحيد بين مؤشرات أنواع البيانات المختلفة هو نوع بيانات المتغير أو الثابت الذي يشير إليه المؤشر.
كيف تستخدم المؤشرات؟
هناك عدد قليل من العمليات الهامة التي سنقوم بها بمساعدة المؤشرات بشكل متكرر. (أ) نحدد متغير المؤشر ، (ب) نحدد عنوان المتغير للمؤشر و (ج) أخيرًا نصل إلى القيمة على العنوان المتاح في متغير المؤشر. يتم ذلك باستخدام عامل التشغيل الأحادي * الذي يُرجع قيمة المتغير الموجود في العنوان المحدد بواسطة المعامل الخاص به. المثال التالي يستخدم هذه العمليات -
#include <stdio.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* pointer variable declaration */ ip = &var; /* store address of var in pointer variable*/ printf("Address of var variable: %x\n", &var ); /* address stored in pointer variable */ printf("Address stored in ip variable: %x\n", ip ); /* access the value using the pointer */ printf("Value of *ip variable: %d\n", *ip ); return 0; }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
Address of var variable: bffd8b3c Address stored in ip variable: bffd8b3c Value of *ip variable: 20
مؤشرات NULL
من الممارسات الجيدة دائمًا تعيين قيمة NULL لمتغير المؤشر في حالة عدم وجود عنوان دقيق لتعيينه. يتم ذلك في وقت إعلان المتغير. يسمى المؤشر الذي تم تعيينه NULL بمؤشر فارغ .
مؤشر NULL هو ثابت بقيمة صفر محددة في العديد من المكتبات القياسية. خذ بعين الاعتبار البرنامج التالي -
#include <stdio.h> int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0; }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
The value of ptr is 0
في معظم أنظمة التشغيل ، لا يُسمح للبرامج بالوصول إلى الذاكرة على العنوان 0 لأن هذه الذاكرة محجوزة بواسطة نظام التشغيل. ومع ذلك ، فإن عنوان الذاكرة 0 له أهمية خاصة ؛ يشير إلى أن المؤشر لا يهدف إلى الإشارة إلى موقع ذاكرة يمكن الوصول إليه. ولكن وفقًا للاتفاقية ، إذا احتوى المؤشر على القيمة الخالية (صفر) ، فمن المفترض أن يشير إلى لا شيء.
للتحقق من وجود مؤشر فارغ ، يمكنك استخدام عبارة "if" على النحو التالي -
if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */
مؤشرات بالتفصيل
المؤشرات لها مفاهيم كثيرة ولكنها سهلة وهي مهمة جدًا لبرمجة لغة سي. يجب أن تكون مفاهيم المؤشر المهمة التالية واضحة لأي مبرمج سي -
الأب رقم. | المفهوم والوصف |
---|---|
1 | مؤشر حسابي هناك أربع معاملات حسابية يمكن استخدامها في المؤشرات: ++ ، - ، + ، - |
2 | صفيف من المؤشرات يمكنك تحديد المصفوفات لتحتوي على عدد من المؤشرات. |
3 | من المؤشر إلى المؤشر يتيح لك C أن يكون لديك مؤشر على مؤشر وما إلى ذلك. |
4 | تمرير المؤشرات إلى الوظائف في C. يؤدي تمرير وسيطة عن طريق المرجع أو العنوان إلى تمكين تغيير الوسيطة التي تم تمريرها في دالة الاستدعاء من خلال الوظيفة المستدعاة. |
5 | مؤشر العودة من الوظائف في C يسمح C للدالة بإرجاع مؤشر إلى المتغير المحلي والمتغير الثابت والذاكرة المخصصة ديناميكيًا أيضًا. |
تعليقات
إرسال تعليق