ماڈیول اسباق (2/2)
اشارے
پوائنٹرز C++ کی سب سے طاقتور اور مخصوص خصوصیات میں سے ایک ہیں۔ وہ آپ کو کمپیوٹر کی جسمانی میموری تک براہ راست رسائی حاصل کرنے کی اجازت دیتے ہیں، موثر وسائل کے انتظام اور اعلی کارکردگی کو چالو کرتے ہیں۔
1. میموری اور ایک پتہ کیا ہے؟
ہر متغیر جس کا آپ اپنے پروگرام میں اعلان کرتے ہیں وہ RAM میموری کے سیل میں محفوظ ہوتا ہے۔ ہر سیل کا ایک منفرد میموری ایڈریس ہوتا ہے (عام طور پر ہیکسا ڈیسیمل فارمیٹ میں ظاہر ہوتا ہے، جیسے، 0x7ffee3bf87ac)۔
C++ ہمیں کسی بھی متغیر کا میموری ایڈریس آپریٹر کا ایڈریس & حاصل کرنے کی اجازت دیتا ہے:
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)2. پوائنٹر کی تعریف
پوائنٹر ایک خاص متغیر ہے جو **کسی دوسرے متغیر کے میموری ایڈریس کو اس کی قدر کے طور پر محفوظ کرتا ہے۔
نحو کو ڈیٹا کی قسم کے بعد نجمہ * کے استعمال کی ضرورت ہے:
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x3. ڈیریفرنس آپریٹر (*)
پوائنٹر کی طرف اشارہ کرنے والے پتے پر ذخیرہ شدہ قدر تک رسائی یا اس میں ترمیم کرنے کے لیے، ہم dereference operator (یا indirection operator) کا استعمال کرتے ہیں، جسے علامت * سے بھی ظاہر کیا جاتا ہے:
int x = 42;
int* ptr = &x;
std::cout << *ptr; // Prints 42 (the value ptr points to)
*ptr = 100; // Modifies the value of x through the pointer
std::cout << x; // Now prints 100!4. صفر پوائنٹرز: nullptr
ایک پوائنٹر جو کسی درست پتے کی طرف اشارہ نہیں کرتا ہے اسے nullptr کلیدی لفظ (C++11 میں متعارف کرایا گیا ہے):
int* ptr = nullptr; // Safe null pointerخود ہی آزمائیں۔
بنیادی طور پر، ایک انٹیجر متغیر ویلیو ہے جس کی ابتدا 42 سے کی گئی ہے۔ ایک پوائنٹر ٹو انٹیجر پی ٹی آر کا اعلان کریں جو ویلیو کے ایڈریس کی طرف اشارہ کرتا ہے۔ قدر کی قدر کو 100 پر سیٹ کرنے کے لیے ptr کی ڈیریفرنسنگ کا استعمال کریں، اور آخر میں std::cout کا استعمال کرتے ہوئے ویلیو پرنٹ کریں۔
اشارہ دکھائیں۔
`int*ptr = &value;`کے ساتھ پوائنٹر کا اعلان کریں،`*ptr = 100;`کا حوالہ دے کر قدر میں ترمیم کریں، اور`std::cout << value;` پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ایک فنکشن doubleValue کی وضاحت کریں جو پوائنٹر کو ایک عدد (int*ptr) پر قبول کرتا ہے اور اس کی طرف اشارہ کرنے والی قدر کو 2 سے ضرب دیتا ہے (اگر پوائنٹر کالعدم نہیں ہے)۔ بنیادی طور پر، متغیر نمبر کے ایڈریس کو پاس کرتے ہوئے doubleValue کو کال کریں اور اسے پرنٹ کریں۔
اشارہ دکھائیں۔
فنکشن کو `int*ptr`قبول کرنا چاہیے۔ اندر،`*ptr = (_ptr) _ 2`استعمال کریں۔ اصل میں اسے`ڈبل ویلیو(&num);` کے ساتھ کال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
فراہم کردہ کوڈ کو دیکھتے ہوئے، کون سا اظہار آپ کو براہ راست a کی قدر میں ترمیم کرنے کی اجازت دیتا ہے، اسے 10 پر سیٹ کر سکتا ہے؟
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?