Programmer نشر 21 نوفمبر 2015 أرسل تقرير نشر 21 نوفمبر 2015 (معدل) بحسب اطلاعي على لغة ++ C قرأت أنه عند تعريف مصفوفة يتم حجز مجال كامل في الذاكرة لعناصر المصفوفة سؤالي هو كيف يمكن الوصول لعناوين العناصر المخزنة في المصفوفة وطباعتها؟ تم التعديل في 21 نوفمبر 2015 بواسطة Programmer اقتباس
0 Lujain Maaz نشر 22 نوفمبر 2015 أرسل تقرير نشر 22 نوفمبر 2015 يوجد طريقتين للوصول إلى عناوين عناصر مصفوفة 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]. اقتباس
السؤال
Programmer
بحسب اطلاعي على لغة ++ C قرأت أنه عند تعريف مصفوفة يتم حجز مجال كامل في الذاكرة لعناصر المصفوفة سؤالي هو كيف يمكن الوصول لعناوين العناصر المخزنة في المصفوفة وطباعتها؟
تم التعديل في بواسطة Programmer1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.