البرمجة بلغة السى – الجزء الخامس – المؤشرات -1- مقدمة المؤشرات Pointers :

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

البرمجة بلغة السى – الجزء الخامس – المؤشرات -1- مقدمة المؤشرات Pointers :

مُساهمة من طرف Admin في السبت فبراير 01, 2014 8:23 pm


البرمجة بلغة السى – الجزء الخامس – المؤشرات -1- مقدمة المؤشرات Pointers :

المؤشرات هى ميزة قوية عند البرمجة بلغة السى (C , C++) والتى تجعله مختلف عن غيره من اللغات المعروفة من الجافا أو البيسك المرئى .
تستخدم المؤشرات فى برنامج لغة السى للوصول إلى الذاكرة ومعالجة العنوان .

عامل (مؤثر) المرجع (&) :

إذا كان (var) متغير فإن (&var) هو عنوانه بالذاكرة .

مثال يستعرض استخدام عامل المرجع فى لغة السى :
الكود:


/* Example to demonstrate use of reference operator in C programming. */
#include <stdio.h>
int main(){
  int var=5;
  printf("Value: %d\n",var);
  printf("Address: %d",&var);  //Notice, the ampersand(&) before var.
  return 0;
}




الخرج :

الكود:


Value: 5
Address: 2686778


ملحوظة :

قد تحصل على قيمة عنوان مختلفة عند استخدام هذا الكود .
فى كود المصدر أعلاه ، يتم تخزين القيمة (5) فى موقع الذاكرة 2686778 . والمسمى (var) هو مجرد اسم يعطى لهذا الموقع .
أنت بالفعل استخدمت عامل المرجع عند استخدام الدالة scanf() كما يلى :

الكود:


scanf("%d",&var);


عامل إلغاء المرجع (*) و متغيرات المؤشرات :

تستخدم متغيرات المؤشرات من أجل أخذ العنوان كقيمة ، بمعنى أن المتغير الذى يخزن قيمة العنوان يسمى متغير المؤشر أو ببساطة "المؤشر" pointer .

إعلان المؤشر :

يستخدم عامل إلغاء المرجع (*) لتعريف (لتحديد) العامل كمؤشر كما يلى :

الكود:


data_type * pointer_variable_name;
int *p;


العبارة أعلاه تعرف (تحدد) (p) كمتغير مؤشر من نوع int .

مثال لاستعراض عمل المؤشرات :


الكود:


/* Source code to demonstrate, handling of pointers in C program */
#include <stdio.h>
int main(){
  int *pc,c;
  c=22;
  printf("Address of c:%d\n",&c);
  printf("Value of c:%d\n\n",c);
  pc=&c;
  printf("Address of pointer pc:%d\n",pc);
  printf("Content of pointer pc:%d\n\n",*pc);
  c=11;
  printf("Address of pointer pc:%d\n",pc);
  printf("Content of pointer pc:%d\n\n",*pc);
  *pc=2;
  printf("Address of c:%d\n",&c);
  printf("Value of c:%d\n\n",c);
  return 0;
}


الخرج :

الكود:


Address of c: 2686784
Value of c: 22

Address of pointer pc: 2686784
Content of pointer pc: 22

Address of pointer pc: 2686784
Content of pointer pc: 11

Address of c: 2686784
Value of c: 2




شرح البرنامج :

1- الكود :

الكود:


int *pc, c;


ينشىء المؤشر (pc) والمتغير (p) . المؤشر (pc) يشير إلى عنوان ما وهذا العنوان به قيمة نفايات . بالمثل ، المتغير © أيضا به قيمة نفايات عند هذه النقطة .

2- الكود :

الكود:


c=22;


يجعل قيمة (c) تساوى (22) ، أى يتم تخزين (22) فى موقع الذاكرة للمتغير (c) .

3- الكود :

الكود:


pc=&c;



يقوم بعمل مؤشر ، يشير إلى عنوان المتغير ( c ) . لاحظ أن (&c) هو عنوان المتغير ( c ) ( لأن c هو متغير عادى ) و (pc) هو عنوان pc ( لأن pc هو متغير مؤشر) . ونظرا لأن عنوان pc هو نفسه عنوان c ، فإن ( *pc) ، فيمة المؤشر pc سوف تكون مساوية لقيمة c .

4- الكود :

الكود:


c=11 ;


يجعل قيمة c بالقيمة "11" . وحيث أن المؤشر pc يشير إلى عنوان c فإن قيمة (*pc) سوف تكون أيضا "11" .

5- الكود :

الكود:


*pc=2;


يغير محتويات موقع الذاكرة المشار إليه بالمؤشر pc ليتغير إلى القيمة "2" . وحيث أن عنوان المؤشر pc هو نفسه عنوان c فإن قيمة c تتغير أيضا إلى القيمة "2" .

الأخطاء الشائعة فى المؤشرات :
افترض أن المبرمج يريد أن يشير المؤشر pc لعنوان c عندئذ :

الكود:


int c, *pc;
pc=c;  /* pc is address whereas, c is not an address. */
*pc=&c; /* &c is address whereas, *pc is not an address. */


فى كلا الحالتين ، المؤشر pc لا يشير إلى عنوان c .

Admin
Admin

عدد المساهمات : 1003
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى