اذهب إلى المحتوى
  • 0

ماذا تعني المؤشرات pointers في ++C ؟

Programmer

السؤال

Recommended Posts

  • 0

تعتبر المؤشرات Pointers من أقوى الميزات التي تمتاز بها لغة ++C عن باقي اللغات المشهورة مثل جافا، فيجوال بيسك..الخ.

لفهم عمل المؤشرات واستخدامها لابد أولًا أن يكون لديك معرفة عن ما هو العنوان Address في ذاكرة الحاسوب. 

تُقسم ذاكرة الحاسوب إلى أجزاء من bytes وكل بايت لديه العنوان الخاص به على سبيل المثال في ذاكرة حجمها 1 KB يوجد 1024 bytes وكل بايت يعطي عنوان (أي أن مجال العناوين من 0 - 1023).

فالمؤشرات إذًا هي متغيرات تختزن عناوين متغيرات أخرى في الذاكرة بالـ hexadecimal النظام الست عشري، يمكن للمؤشرات أن تؤشر على متغير من نوع  primitive أو عنصر من مصفوفة array أو غرض object.

يُعرّف المؤشر بطريقتين:

int *p;
      أو
int* p;

مثال على طريقة تعريف مؤشر وإسناد عنوان متغير من نوع int  إليه:

int* ptr;
int a = 5;
ptr = &a;  // &a is the address of a.

التعليمة البرمجية int* ptr تعرف مؤشر pointer من نوع int أي أن العنوان الذي يختزنه هو عنوان متغير من نوع int.

التعليمة البرمجية ptr = &a تقوم بإسناد عنوان المتغير a إلى المؤشر p (أي أن a& هو عنوان المتغير a وتُقرأ ( Reference a) رفرنس a).

pointers.thumb.png.97d78741c863480faa420

مثال:

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout<< "Address of c (&c): " << &c << endl;
    cout<< "Value of c (c): " << c << endl << endl;

    pc = &c;    // Pointer pc holds the memory address of variable c
    cout<< "Address that pointer pc holds (pc): "<< pc << endl;
    cout<< "Content of the address pointer pc holds (*pc): " << *pc << endl << endl;
    
    c = 11;    // The content inside memory address &c is changed from 5 to 11.
    cout << "Address pointer pc holds (pc): " << pc << endl;
    cout << "Content of the address pointer pc holds (*pc): " << *pc << endl << endl;

    *pc = 2; 
    cout<< "Address of c (&c): "<< &c <<endl;
    cout<<"Value of c (c): "<< c<<endl<< endl;

    return 0;
}

النتيجة:

pointersOutPut.thumb.png.d6d0c339ac63f81

ماذا تعني المؤشرات pointers في ++C ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...