The Relation between Pointers and Arrays
2-Arrays of Pointers
-__
1-العلاقة بين المؤشرات والمصفوفات
هناك علاقة وثيقة بين المصفوفات والمؤشرات ويمكن استخدام احدهما للحلول مكان الاخر في معظم الحالات.
لو تم التصريح عن مصفوفة لاعداد الصحيحة كود:
كود:
تكافئ التعليمة السابقة التعليمة التالية:
كود:
ويمكن التنقل بين عناصر المصفوفة بأاستخدام المؤشر (تسمى هذي العملية بي تعبير المؤشرات):
كود:
حيث تدل على العنصر
كود:
ملاحظة مهمة:
يمكن استخدام العمليات الحسابية مع المؤشرات لكن هناك اختلاف .فامثلا لو عنوان المؤشر في الذاكرة 2000 وهو من نوع الاعداد الصحيحة .فالعملية التالية 2000+2 طبيعا تساوي 2002 لكن في المؤشرات هذي النتيجة خاطئة
تتم هذي المعادلة بالطريقة التالية
كود:
__________________________________________________ __
ويجب الانتباة لضرورة وجود القوسين وتصبح العبارة السابقة عند كتابتة بدون قوسين (اي نضيف 3 الى العنصر كود:
كود:
وبما ان اسم المصفوفة عبارة عن عنوان اول عنصر من عناصرها يمكن ان نعاملها معاملة المؤشرات
كود:
كود:
ويمكن استخدام المؤشر مثل ما نفعل بالمصفوفات :
كود:
كود:
كود:
[
2-Arrays of Pointers
-__
1-العلاقة بين المؤشرات والمصفوفات
هناك علاقة وثيقة بين المصفوفات والمؤشرات ويمكن استخدام احدهما للحلول مكان الاخر في معظم الحالات.
لو تم التصريح عن مصفوفة لاعداد الصحيحة كود:
وعن مؤشر كود:b[5]
يمكن ان نضع في bPtr عنوان بداية المصفوفة بواسطة التعليمة التالية:int * bPtr
كود:
وذالك لان اسم المصفوفة هو عبارة عن مؤشر على اول عنصر لها.bPtr=b;
تكافئ التعليمة السابقة التعليمة التالية:
كود:
الان اخذنا عنوان اول عنصر من عنصر المصفوفة بدلا من اسم المصفوفة.bPtr = &b [0];
ويمكن التنقل بين عناصر المصفوفة بأاستخدام المؤشر (تسمى هذي العملية بي تعبير المؤشرات):
كود:
يدل الرقم 3 على مقدار الانزياح offset مقارنة بقيمة المؤشر.*(bPtr + 3)
حيث تدل على العنصر
كود:
__________________________________________________b[3]
ملاحظة مهمة:
يمكن استخدام العمليات الحسابية مع المؤشرات لكن هناك اختلاف .فامثلا لو عنوان المؤشر في الذاكرة 2000 وهو من نوع الاعداد الصحيحة .فالعملية التالية 2000+2 طبيعا تساوي 2002 لكن في المؤشرات هذي النتيجة خاطئة
تتم هذي المعادلة بالطريقة التالية
كود:
على ان الاعداد الصحيحة تخزن بالذاكرة في 2 بايت.(2000+2*2)
__________________________________________________ __
ويجب الانتباة لضرورة وجود القوسين وتصبح العبارة السابقة عند كتابتة بدون قوسين (اي نضيف 3 الى العنصر كود:
وعلى اعتبار انة يمكن استخدام عناصر المصفوفة ضمن تعابير المؤشرات فان العنوان :b[0]
)
كود:
يمكن كتابتة بهذي الطريقة&b[3]
bPtr + 3
وبما ان اسم المصفوفة عبارة عن عنوان اول عنصر من عناصرها يمكن ان نعاملها معاملة المؤشرات
كود:
يعطي القيمة*( b +3 )
كود:
بشكل عام يمكن الوصول الى اي عنصر من عناصر المصفوفة بأستخدام مؤشر مضاف الية مقدار الانزياح.b[3]
ويمكن استخدام المؤشر مثل ما نفعل بالمصفوفات :
كود:
يدل على العنصرbPtr [1]
كود:
المثال التالي يستخدم الطرق الاربعة الي تكلمنا عنهاb[1]
كود:
[
int main()
{
int b[]= {10 ,20 ,30 ,40 };
int *bPtr= b;
cout<<"Array supscript \n";
for (int i=0;i<4;i++)
cout<<"b["<<i<<"] = "<<b[i]<<endl;
cout<<"Pointer offset"<<endl;
for (int i=0;i<4;i++)
cout<<"*(b + "<<i<<" ) = "<<*(b + i)<<endl;
cout<<"Pointer subscribt"<<endl;
for (int i=0;i<4;i++)
cout<<"bPtr ["<<i<<"] = "<<bPtr[i]<<endl;
cout<<"Pointer offset\n";
for (int i=0;i<4;i++)
cout<<"*( bPtr + "<<i<<" ) = "<<*(bPtr +i)<<endl;
system("PAUSE");
return 0;
}