مرکزی مواد پر جائیں
ماڈیول 5 · سبق 2 از 2کورس میں 12/18~15 min
ماڈیول اسباق (2/2)

اشارے

پوائنٹرز C++ کی سب سے طاقتور اور مخصوص خصوصیات میں سے ایک ہیں۔ وہ آپ کو کمپیوٹر کی جسمانی میموری تک براہ راست رسائی حاصل کرنے کی اجازت دیتے ہیں، موثر وسائل کے انتظام اور اعلی کارکردگی کو چالو کرتے ہیں۔


1. میموری اور ایک پتہ کیا ہے؟

ہر متغیر جس کا آپ اپنے پروگرام میں اعلان کرتے ہیں وہ RAM میموری کے سیل میں محفوظ ہوتا ہے۔ ہر سیل کا ایک منفرد میموری ایڈریس ہوتا ہے (عام طور پر ہیکسا ڈیسیمل فارمیٹ میں ظاہر ہوتا ہے، جیسے، 0x7ffee3bf87ac)۔

C++ ہمیں کسی بھی متغیر کا میموری ایڈریس آپریٹر کا ایڈریس & حاصل کرنے کی اجازت دیتا ہے:

C++
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)

2. پوائنٹر کی تعریف

پوائنٹر ایک خاص متغیر ہے جو **کسی دوسرے متغیر کے میموری ایڈریس کو اس کی قدر کے طور پر محفوظ کرتا ہے۔

نحو کو ڈیٹا کی قسم کے بعد نجمہ * کے استعمال کی ضرورت ہے:

C++
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x

3. ڈیریفرنس آپریٹر (*)

پوائنٹر کی طرف اشارہ کرنے والے پتے پر ذخیرہ شدہ قدر تک رسائی یا اس میں ترمیم کرنے کے لیے، ہم dereference operator (یا indirection operator) کا استعمال کرتے ہیں، جسے علامت * سے بھی ظاہر کیا جاتا ہے:

C++
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 میں متعارف کرایا گیا ہے):

C++
int* ptr = nullptr; // Safe null pointer

خود ہی آزمائیں۔

ورزش#cpp.m5.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

بنیادی طور پر، ایک انٹیجر متغیر ویلیو ہے جس کی ابتدا 42 سے کی گئی ہے۔ ایک پوائنٹر ٹو انٹیجر پی ٹی آر کا اعلان کریں جو ویلیو کے ایڈریس کی طرف اشارہ کرتا ہے۔ قدر کی قدر کو 100 پر سیٹ کرنے کے لیے ptr کی ڈیریفرنسنگ کا استعمال کریں، اور آخر میں std::cout کا استعمال کرتے ہوئے ویلیو پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

`int*ptr = &value;`کے ساتھ پوائنٹر کا اعلان کریں،`*ptr = 100;`کا حوالہ دے کر قدر میں ترمیم کریں، اور`std::cout << value;` پرنٹ کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#cpp.m5.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

ایک فنکشن doubleValue کی وضاحت کریں جو پوائنٹر کو ایک عدد (int*ptr) پر قبول کرتا ہے اور اس کی طرف اشارہ کرنے والی قدر کو 2 سے ضرب دیتا ہے (اگر پوائنٹر کالعدم نہیں ہے)۔ بنیادی طور پر، متغیر نمبر کے ایڈریس کو پاس کرتے ہوئے doubleValue کو کال کریں اور اسے پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

فنکشن کو `int*ptr`قبول کرنا چاہیے۔ اندر،`*ptr = (_ptr) _ 2`استعمال کریں۔ اصل میں اسے`ڈبل ویلیو(&num);` کے ساتھ کال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#cpp.m5.l2.q1
تیار

فراہم کردہ کوڈ کو دیکھتے ہوئے، کون سا اظہار آپ کو براہ راست a کی قدر میں ترمیم کرنے کی اجازت دیتا ہے، اسے 10 پر سیٹ کر سکتا ہے؟

C++
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
جواب کے اختیارات