Professional Documents
Culture Documents
المحاضرة الثانية
المحاضرة الثانية
المحاضرة الثانية
Pointers المؤشرات
المؤشرات Pointers
oتعد ادلؤشرات من أىم وأقوى اخلصائص ادلتوفرة يف لغة C++وىي اليت متيز ىذه اللغة عن باقي لغات الربرلة.
.dإمكانية استحداث واستخدام تراكيب بيانات ديناميكية ،أي تراكيب بيانات متغًنة ميكن ذلا أن تنمو أو
تتقلص أثنـاء تنفيذ الربنامج مثل القوائم ادلتصلة ) (Linked Listsوالطوابًن )(Queues
أن ادلؤشرات تستخدم يف الربامج اليت حنتاج فيها إىل حجز وإلغاء حجز الذاكرة أثناء تنفيذ الربنامج .
أمثلة :
;1. int * p
إعالن عن مؤشر يشًن إىل متغًن من النوع الصحيح .
عند إسناد قيمة أو متغًن إىل مؤشر جيب أن تكون ىذه القيمة أو ادلتغًن من نفس نوع
بيانات ادلؤشر وغًن ذلك يؤدي إىل خطأ قواعدي يف الربنامج
.2األداة * واليت تستخدم إلعطاء قيمة ادلتغًن للمؤشر ( ادلشار إليو) أي قيمة xيف ادلثال السابق .
وادلثال التايل يوضح العملية كما يلي :
;y=*mem
ويف ىذه احلالة تكون القيمة ادلخزنة يف موقع ادلتغًن yىي قيمة xنفسها أي 3أي يصبح معىن اجلملة ىو أعطى y
القيمة ادلخزنة لدى موقع ادلؤشر mem
ولإليضاح أكثر نأخذ المثال التالي :
لنفرض
;int i,*p
;p=&i
وعليو فيوضع عنوان iيف ادلؤشر pفإن ىذا ادلؤشر سوف يشًن إىل ادلتغًن i
p i
إن وضع عنوان iيف ادلؤشر pمل يؤثر على زلتوى ادلوقع ادلخصص للمتغًن i
وميكن وضع العنوان يف ادلؤشر أثناء اإلعالن كما يلي :
;int i
;int *p=&i
int i,j,*p,*q
q ?
0
i
بعد ذلك ميكن إعطاء ادلتغًن قيم باستخدام ادلؤشر كما يلي :
1 p
q 1
1
i
;*q =2
2 p
q 2
2
i
تأخذ األداتان & و* أولوية يف التنفيذ على سائر العمليات (ادلؤثرات) ادلختلفة
p
أي
a
0 1 2 3 4 5 6 7 8 9
وهبذا ميكن الوصول إىل ] a[0عن طريق pوبإمكاننا ختزين القيمة 5على سبيل ادلثال كعنصر يف ادلوقع األول
من ادلصفوفة كما يلي:
;*p=5
6 إعداد األستاذ/حذيفة عبد الرحمن
برمجة تراكيب البيانات
p فيصبح الشكل كما يلي:
a 5
0 1 2 3 4 5 6 7 8 9
يعترب اسم ادلصفوفة مؤشر ثابت على أول عنصر من عناصرىا
a
0 1 2 3 4 5 6 7 8 9
;q=p+3 إذا جعلنا
p
فهذا يعين:
q
p p
a
0 1 2 3 4 5 6 7 8 9
;p+=6 إذا جعلنا
a
0 1 2 3 4 5 6 7 8 9
a
0 1 2 3 4 5 6 7 8 9
a
0 1 2 3 4 5 6 7 8 9
مثال-:5
>#include<iostream.h
)(int main
{
;int v,*a,**b
;v=20
;a=&v
;b=&a
;cout<<"**b="<<**b<<endl
;return 0
}