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

السؤال

نشر (معدل)

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

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

Recommended Posts

  • 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].

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...