السلام عليكم. صباح الخير, انا صاحية نشيطة هذا الصباح لكن نمت وانا جالسة افكر بموضوع "المؤشرات مالها و ما عليها" المثبّت بالمنتدى. و بالطبع عنوان موضوعي "جزء من النص مفقود" قاصدة بالنص هنا هو موضوع "المؤشرات مالها وما عليها". لأني قرأته المغرب البارحة واطلعت على بعض المواضيع الملحقة بالمؤشرات و المثبتة بالمنتدى. لكن لم اجدها تتطرق إلى هذا الموضوع اللي انا حابة اباشر فيه واقدم نبذة عنه. و هو المؤشر الثابت Constant Pointer و المؤشر إلى ثابت Pointer to a constant. أما لو كان هناك موضوع عائم بصفحات المنتدى تطرق إلى هذه الأشياء مسبقاً فبحول الله رح يكون هذا الموضوع معزّز وداعم له و (التكرار يعلّم الشطّار). اوكي, رايحة استغل الساعة هذه واقدم لكم الموضوع,. بالطبع موضوعي ليس ابتدائياً و موضوع "المؤشرات مالها وما عليها" و الملحقات المتعلقة بالموضوع للأخت بنت اليمن مواضيع جديرة بالتقدير وجزيلة معلوماتياً, لذلك انا انصح بقرائتها و فهمها قبل الخوض بموضعي هذا عن طريق الرابط التالي: مواضيع المنتدى المثبّتة أو الانتقال إلى اي مرجع آخر متعلق بالمؤشرات. أما بالنسبة للاشخاص اللي عندهم خلفية مسبقة لو بتقدير مقبول عن المؤشرات فـ ياريت يكملوا معي. تمهيد: أولاً يحظرني في هذا الوقت بالذات اربع مسلّمات (بديهيات) للمؤشرات في لغة C++ وهي كالتالي: 1. عند استخدام المؤشرات فليس هناك إلاّ جوهرتين فقط, هما المؤشر pointer و الكائن object الذي يشير إليه. 2. إذا احتوى المؤشر pointer على قيمة فهي إما عنوان لكائن Object Address في الذاكرة أو لا شيء NULL وهي قيمة صفر, مثل:
MyClass *ptr = 0;//Null Pointer
int *ptrInt = new int(10);//Pointer to int data typedouble *ptrDouble = new double(30.523);//pointer to double data type.//Print the size of both ptrInt and ptrDouble:cout << "ptrInt size is: " << sizeof(ptrInt) << " byte(s)" << endl;cout << "ptrDouble size is: " << sizeof(ptrDouble) << " byte(s)" << endl;
int *ptrInt = new double(23.0);//Fatal error…Because there is no way to convert from double to int
double *ptrDouble = new int(24);//Fatal error...for the same reason too.
int obj1, obj2 = 0;int * const ptr = &obj1;*ptr = 10;//Ok, change the value to which it point to.cout << obj1 << ' ' << (*ptr) << endl;//ptr = &obj2; Error, It can't point to anothor object *ptr = 30;//Ok, change the value again...
//Authord by Raghad to illustrate constant pointer.#include <iostream>using std::cout;using std::endl;void func(int * const);int main(){ int obj; obj = 4000; func(&obj);//Passing the address of obj to func()…acts as initialization cout << obj << endl;// It's 40 return 0;}void func(int * const ptr){ int someVar = 40; // ptr = &someVar; Error, we can't change the address(obj). *ptr = someVar; //Ok, just change the value of (obj) itself.}
int obj1, obj2;const int NORMAL_CONST = 23;obj1 = obj2 = 0;const int *ptr;//Pointer to a constant.//Usage:ptr = &NORMAL_CONST;//It can point to constantcout << (*ptr) << endl;ptr = &obj1;//Ok, It’s allowed to change pointing to another object.// *ptr = 30; Error, we can't use it to change the values directly.ptr = &obj2;//Ok
int uglyObj = 20;const int * const ptr = &uglyObj;//ptr points to uglyObj for ever just because it is the first love(initialized).cout << (*ptr) << endl;// *ptr = 30;Error, no way to change its mind(the value to which it points).int beautifulObj = 30;//New beautiful object.//ptr = &beautifulObj;Error, no way to capture its heart (to point to something else)