مقدمة لمؤشرات سي

مقدمة إلى C Pointers

المؤشرات هي واحدة من أكثر الأجزاء المربكة / الصعبة فيج، فى اعتقادي. خاصة إذا كنت جديدًا في البرمجة ، ولكن أيضًا إذا كنت تنتمي إلى لغة برمجة عالية المستوى مثل Python أو JavaScript.

في هذا المنشور ، أود أن أقدمهم بأبسط طريقة ممكنة ولكن غير مبهمة.

المؤشر هو عنوان كتلة من الذاكرة تحتوي على متغير.

عندما تعلن عن رقم صحيح مثل هذا:

int age = 37;

يمكننا استخدام&عامل التشغيل للحصول على قيمة العنوان في ذاكرة المتغير:

printf("%p", &age); /* 0x7ffeef7dcb9c */

لقد استخدمت ملف%pالتنسيق المحدد فيprintf()لطباعة قيمة العنوان.

يمكننا تخصيص العنوان لمتغير:

int *address = &age;

استخدامint *addressفي الإعلان ، لا نعلن عن متغير عدد صحيح ، بل نعلن عن أالمؤشر إلى عدد صحيح.

يمكننا استخدام عامل المؤشر*للحصول على قيمة المتغير الذي يشير إليه العنوان:

int age = 37;
int *address = &age;
printf("%u", *address); /* 37 */

هذه المرة نستخدم عامل المؤشر مرة أخرى ، ولكن نظرًا لأنه ليس إعلانًا هذه المرة ، فهذا يعني "قيمة المتغير الذي يشير إليه المؤشر".

في هذا المثال نعلن أنageمتغير ، ونستخدم مؤشرًا لتهيئة القيمة:

int age;
int *address = &age;
*address = 37;
printf("%u", *address);

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

تعتبر المؤشرات فرصة عظيمة لأنها تجبرنا على التفكير في عناوين الذاكرة وكيفية تنظيم البيانات.

المصفوفاتمثال واحد. عندما تعلن عن مصفوفة:

int prices[3] = { 5, 4, 3 };

الpricesالمتغير هو في الواقع مؤشر على العنصر الأول من المصفوفة. يمكنك الحصول على قيمة العنصر الأول باستخدام هذاprintf()تعمل في هذه الحالة:

printf("%u", *prices); /* 5 */

الشيء الرائع هو أنه يمكننا الحصول على العنصر الثاني بإضافة 1 إلىpricesالمؤشر:

printf("%u", *(prices + 1)); /* 4 */

وهكذا بالنسبة لجميع القيم الأخرى.

يمكننا أيضًا القيام بالعديد من عمليات التلاعب في الأوتار ، نظرًا لأن السلاسل عبارة عن مصفوفات تحت الغطاء.

لدينا أيضًا العديد من التطبيقات ، بما في ذلك تمرير مرجع كائن أو وظيفة حولها ، لتجنب استهلاك المزيد من الموارد لنسخها.

تحميل مجانيكتيب C


المزيد من دروس clang: