• 0

كيف أُظهر العناوين المخزنة في الذاكرة لعناصر مصفوفة في ++C؟

بحسب اطلاعي على لغة ++ C قرأت أنه عند تعريف مصفوفة يتم حجز مجال كامل في الذاكرة لعناصر المصفوفة سؤالي هو كيف يمكن الوصول لعناوين العناصر المخزنة في المصفوفة وطباعتها؟

تمّ تعديل بواسطة Programmer

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

يوجد طريقتين للوصول إلى عناوين عناصر مصفوفة array في ++C وبلا شك أن كلا الطريقتين تعتمد على المؤشرات pointers.

الطريقة الأولى هي باستخدام pointer notation في هذه الطريقة يتم الاعتماد على المصفوفة نفسها في الوصول لعناوين العناصر فيها إذ أن reference المصفوفة يحوي على عنوان أول عنصر في الذاكرة مثال:

#include <iostream>
using namespace std;

int main() {
    float a[5];
    
    cout<<"Displaying address using pointers notation: "<< endl;
    for (int i = 0; i < 5; ++i) {
        cout << a+i <<endl;
    }

    return 0;
}

بما أن عناصر المصفوفة تُخزّن ضمن مجال واحد وبالترتيب فستكون عناوين العناصر متسلسلة ابتداءً من عنوان العنصر الأول وحتى الأخير أي أن كل عنوان يزيد عن سابقه بـ 1 كما في المثال السابق.

الطريقة الثانية هي باستخدام المؤشرات pointers وتتم بإسناد المصفوفة إلى المؤشر pointer ثم زيادة قيمة المؤشر كل مرة بمقدار 1 كما في المثال التالي:

#include <iostream>
using namespace std;

int main() {
    float a[5];
    float *ptr;
    
    cout << "Displaying address using arrays: "<<endl;
    for (int i = 0; i < 5; ++i) {
        cout << "&a[" << i << "] = " << &a[i] <<endl;
    }

    ptr = a;   // ptr = &a[0]
    cout<<"\nDisplaying address using pointers: "<< endl;
    for (int i = 0; i < 5; ++i) {
        cout << "ptr + " << i << " = "<<ptr+i <<endl;
    }

    return 0;
}

ملاحظات:

&a[i]

تعطي عنوان العنصر عند الـ index i أي أنها تساوي قيمة ptr+i.

للوصول إلى عنوان عنصر ما بشكل مباشر من دون اللجوء إلى حسابه من عنوان أول عنصر؛ حدّد فهرس العنصر index في الشيفرة:

 &a[i]

مثلًا الوصول لعنوان العنصر الثالث في المصفوفة:

int* ptr;
int a[5];
ptr = &a[2];  // &a[2] is the address of third element of a[5].

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن