 اسلام علیکم، today's our 14th میٹنگ، آج ہم نے پسلی دفعہ ایک پروبرم شروع کیا تھا پہلے اس کو دسکس کرتے ہیں اور کمپلیٹ کرتے ہیں اس کے بعد ایک بہت ہی ایمپورٹنٹ topic، زرہ سا کمپلیکس ہے لیکن بہت مزے کا ہے اس کو شروع کریں گے وہ topic ہے pointers کا چھلی آئیے ہم پسلی دفعہ والے پروبرم کو پہلے کمپلیٹ کر لیں وہ پروبرم آپ کو یاد ہوگا سیلری اور ٹیکسز کے لئے کسی لوار سیلری کاملیات کو بھی لے گے اور سیلری کاملیات کو بھی چیزاہر ہے جو اس کے اندر ہم نے انپورٹ والا فنٹشن دسکس کر لیے تھا اب ہم کہتے ہیں کلکلیٹ سیلری والا فنٹشن آج دسکس کرتے ہیں اپنے یہ پروبرم actually سارا پر لیا ہوگا سب کچھ دیکھ لیا ہوگا اگر کچھ اسمجھ نہیں آئی تو ایمیل ساری بڑا ہے اور آپ کو ہمیں بھی لگتے ہیں کالکلیٹ سیلری کے اندر جو چھوٹیسی کمتکیشن آتی ہے وہ ہی وہ تکس لیبز کی آتی ہے کہ جناب 0 سے 1 کے 5,000 تک کوئی تکس دیدک نہیں کرنا 5,000 اور 1 سے 1 کے 10,000 تک 5% تکس دیدکٹ ہوگا اور so on تو ایمیل ساری بڑا ہے کہ ہم اسی 2 دمیشنل ایرے کیا سیل ہے اس کے پہلے کالم میں تو ہم نے گرو سیلری انپٹ کرا لیوزر سے ایک فنکشن کے اندر دوسرا فنکشن جو ہے جس میں کالکلیٹ سیلری میں جائیں گے اس میں بھی ایرے پاس کر دیں گے اور نمبر اف امپلویس پاس کر دیں گے ایرے جو ہے وہ بھائی رفرنس پاس ہوگی تو جو بھی اس میں چینجز ہوگے وہ اویلبل ہوگے ہمیں بھائی رفرنس پاس کر دیں گے اور جو نمبر اف امپلویس جو ہے وہ بھائی ویلیو جائے گا so it is going to be used as a loop counter so what do we do once we go into the calculate salary function we will run a simple loop for i equal to 0 i less than num imps increment i and then for each employee we need to calculate the net salary ایک تو ہمیں definition چاہیے نیٹ سیلری کی نیٹ سیلری کی definition یہ ہوگی grow salary minus the tax so tax calculate ہوگا grow salary سے subtract ہو جائے گا رکھا کہاں جائے گا اسی رو پے second column کے اندر یعنی index wise it will say the current employee is row column number one remember column number zero or column number one جو ہے وہ پہلے دوسرہ column سے so let's go on with it loop شروع ہو گئی opening brace آگیا اب اس کے اندر کیسے ہم calculate کریں کہ نیٹ سیلری کیا ہے یہاں پہ ایک nested if statement چلے گی پہلے تو آپ نے چیک کیا کہ جی if salary is less than or equal to 5000 یہ grow salary کی بات ہو رہی ہے then net salary is equal to grow salary کوئی tax deduct نہیں ہوگا in terms of the array that we are using it will be something like support the loop counter is I جیسے ہم employees کی through step through کر رہے ہیں so we will say something like if cell of I comma zero is less than equal to 5000 اب ایسائنمنٹ آجائے گی net salary کی cell of I second index اس کا ہو جائے گا one so cell of I one equals cell of I zero امہ square brackets نہیں میچ میں کہہ رہا so we have place the same the grow salary in the net salary column اب یہ if تھا پانچ ہزاریہ اس سے کم سیلری ہے اب آجائیں ایلس کے اندر else کیا کرنا ہے next block جو شروع ہوتا ہے یہ again I would recommend کہ آپ بریس اس استعمال کریں وہ کلیر رہتی ہے جیس اور indentation لازمی ہے as per our writing guidelines and style rules so we say else بریس کھولا اب next if اب یہاں پہنچیں گے کب جب employees کی salary جو ہے پانچ ہزاریہ اس سے کم نہیں ہے that is the else part اب کیسے کیا ہے if cell of I comma zero is less than or equal to 10,000 یہ ہم نے next slab ڈیفائن کیا تھا تو اس کا دن والا part جو ہے دن لکھتے نہیں ہے سی کے اندر اس کے اندر آجائے گا cell of I comma I square bracket one is equal to cell of I zero minus جو بھی اس پہ ٹکس کالکلیٹ کیا جاتا ہے so ٹکس ہم نے کہا ہے اس لب کے اندر five percent ہے so we will say point zero five یا zero point zero five multiplied by cell of I zero so what have you done we've taken the grow salary subtracted from it the calculated tax and stored it back in column index one which is the second column of the cell array یہ نیستیڈ اف والے کا پہلا کا part ہے اس کا بھی else آتا ہے so we say else اب دیکھیں ہو کیا ہے آیستہ آیستہ logic refine ہوتا جا رہا ہے پہلے اف نے کہا جی اگر سیلری پانچزار یا اس سے کم ہے تو یہ کرو ورنا اگر سیلری دسزار یا اس سے کم ہے تو یہ کرو ورنا so another else next block starts if salary is which is cell of I I bracket zero is less than or equal to twenty thousand cell of I one equals cell of I zero minus zero point one ten percent کا سلاب ہے times cell of I zero so اب دس فیصد والا آتے ہو گیا بلوک ہو گیا یہاں پہ دس فیصد والا آگیا اب اس کا بھی else بھی رہتا ہے اور وہ else آخری کس ہے اور اس باستے آخری کس ہمارا سلاب جو تھا وہ تھا سیلری greater than twenty thousand جب آخری کس آئے we don't need to do a test جب یہاں پہنچے گے تو جیس کی سیلری پانچزار سے کم نہیں ہے دسزار سے کم نہیں ہے بیسزار سے کم نہیں ہے لہذا یہ بیسزار سے زیادہ ہی ہو گی so simply else کے اندر آجائے گا cell of I one equals cell of I zero minus ہم نے اگر 15% کہا تھا تو point one five times cell of I zero سب سیمی کولن وگر آپ دیکھ لیے لگے ہوئے یہ نیستڈ اف بلوک بنتا ہے اف کے اندر اف کے اندر اف اس طرح ہم نے کیوں لکھا ہے دو تین چیزیں دیکھیں یہاں پہ سوچ سٹیٹمنٹ نہیں چلتا کیونکہ سوچ سٹیٹمنٹ سپسیفک کیسیز کے ساتھ چلتا ہے ہم نے یہاں پہ اف کے ساتھ کمپریزن کرنا ہمیں لازمی ہے تھوڑا ساپ لوجک پہ غور کریں تو یہی ٹیست الٹے نہیں کیے جا سکتے you have to test کہ سیلری is less than or equal to five thousand first وہ اس باستے کہ جس بندے کی سیلری چار ہزار روپہ ہے اس پہ اگر ٹیست لگائیں گے سیلری less than ten thousand true آئے گا سیلری less than twenty thousand true آئے گا سیلری less than a hundred thousand true آئے گا لہذا سب سے پہلے ٹیست کریں چھوٹی سیلری پھر اس سے بڑی پھر اس سے بڑی پھر اس سے بڑی یہ رینڈم سیکونٹس نہیں ہے یہ ordered tests ہیں اس ٹیست کا ہمیں فائدہ یہ ہے یہ تھوڑا ساپ نے لوجک لگا کے جو ٹیست جنریٹ کیا ہے اس کا فائدہ یہ ہے کہ ہم compound if سٹیٹمنٹ سے بچ گئے ہیں کونسی compound if سٹیٹمنٹ اگر یہ ہم نہ کرتے تو پھر ہمارے if کچھ اس طرح کا ہوتا کہ ہم کہہ رہی ہوتے if cell of i zero is greater than equal to zero and وہ double ampersand ڈالکے cell of i zero is less than equal to five thousand یہ کرو ایک if ختم ہو گیا پھر دوسرا if if cell of i zero is greater than five thousand ڈالکے گئے ہیں ڈالکے گئے ہیں greater than equal to five thousand one you are just greater than five thousand and cell of i zero less than or equal to ten thousand پھر یہ کرو you could have separated it into separate if statements but then every if statement would have had two tests so it's nicer to use a nested if structure as long as you do the analysis right so یہ کر کے جب لوپ چلتی ہے تو second column of the cell ڈالکے اندر net cell repopulate ہو جاتی ہے اس پارٹ of the function یا اس پارٹ of the program کا کام ختم ہو گیا واپس مین میں چلے گئے جب مین میں ہم واپس آئے تو اب جو حصہ رہتا ہے اس میں تھوڑا سے algorithm کی ضرورت ہے وہ حصہ ہے کہ جی اب ڈالکی employees کو ڈیٹمین کیا جائے کہ جی کون ایسا ڈالکی میں بد نسیب نہیں کہوں گا ڈالکی employee ہے جس کی grow cell ڈالکی تو اپنے ڈالکی سے زیادہ ہے لیکن net cell ڈالکی سے کم ہے اس کا ازراء algorithmic picture لیں کہ جی کیسے ڈیٹمین کیا جائے گا پہلی چیز تو یہ ہے کہ سارے employees کو تو process کرنائیں کرنائیں so there will be a loop which says starting from zero up to none m's اس کو process کرو ہم نے شروع کیا ایک employee کی grow cell ڈالکی اور net cell ڈالکی ڈالکی کے کچھ variables میں رکھ لی وہ آپ کے code میں لکھا ہوا ہے اب کیا کرتے ہیں اب اس کو test کرنے ہیں against all other employees ایک اگر ہم complex programming کرنا چاہیں تو ہم کہیں گے جی اس کو اپنے ساتھ تو نہیں نا test کرنا لیکن اگر logic کو دیکھیں اپنے ساتھ ہم test کیا کریں گے if grow cell ڈالکی is greater than cell of i0 and net cell ڈالکی is less than cell of i1 تو جب employee کی اپنی grows اور اپنی cell ڈالکی وہ cell ڈالکی کے ساتھ کمپیر ہوگی اپنی values کے ساتھ تو یہ test تو فیل ہو جائے گا so he will not be classified to make the logic simple we take this grows and net cell ڈالکی for any employee and test them against all the values in the array so it's simple outer loop simply steps from zero to number of employees minus one c indexing اس کے بعد ہم نے grows cell ڈالکی ایک temporary variable میں رکھلی net cell ڈالکی so cell of i0 ایک variable میں cell of i1 دوسرے variable میں اس کے بعد ایک inner loop چلا دی جو کہ پھر وہی کرے گی for j equal to zero نیا loop counter j less than number of employees j incremented اور اب کمپیر کرتی جاتی ہے کہ جی if grows cell ڈالکی جو variable میں رکھی ہوئے if grows cell ڈالکی is greater than cell of j0 and net cell ڈالکی is less than cell of j1 یہ وہ والا انلکی امپلوی ہے if statement کا logic ہو گیا اگر یہ logic clear ہو گیا تو جا اب اس کے لیے مارکنگ چاہئے مارکنگ کے لیے یاد ہو گا ہم نے ایک array declare کی تھی لکی لکی کے اندر انٹریز کتنی تھی جتنے امپلویوں کی انٹریز تھی so we started out array size of 100 تو لکی کے اندر 100 انٹریز تھی اور سب کو ہم نے initialize کر دیا تھا to zero یہاں پہ ہم کہہ رہے ہیں کہ جی اب ایک ہمیں انلکی امپلوی مل گیا ہے کونسی والی جگے پے ملا ہے جو outer loop ڈیٹرمن کر رہی ہے ہم outer loop ڈالکی آئی والا امپلوی اس کو process کر رہے ہیں اس وقت so آئی والا امپلوی جو ہے وہ جی کے ساتھ کمپیر کی اور پتہ چلا eye is unlucky so یہاں پہ if statement کی اندر ہم کہیں گے lucky of eye equals 1 so ہم نے اس کے position کے سامنے ایک flag لگا دیا and that is it this is our algorithm that the algorithm states that for each employee compare his or her gross and net salaries against those of every other employee and if an anomaly is found raise a flag once this process is complete your lucky array is populated with the ones in the unlucky positions we go back to the main program for this function کو lucky array بھی pass کرنی ہے so it will have sell array going there lucky array going there both by reference because they are arrays they are automatically by reference and you will also pass the nummems the number of employees that we are processing now we are back to main now we need to print out the list of unlucky employees we will simply state their numbers their gross salary and their net salary how do we do that go back to another function those function کو بھی sell بھی pass کر دیں lucky بھی pass کر دیں number of employees we pass کر دیں those function میں کیا ہوگا اب ہم lucky array جو تھی اس کو process کریں گے so ہم کہتے ہیں for eye equal to 0 eye less than nummems eye incremented if lucky of eye is not equal to 0 یا آپ کہلیں if lucky of eye equals 1 equals یاد ہے double equal to sign کے ساتھ ہے آپ کے سامنے code پڑا ہوئے if this is 1 then see out اب output کیا کرنے employee کا نمبر کونسا والا employee ہے جو کہ اس unlucky category میں fall کرتا ہے as human beings ہماری گنتی ایک سے شروع ہوتی ہے so ہم index کو ایک سے increment کرکے output کر دیتے ہیں so we say something like see out employee number اور پھر eye plus 1 so less than less than eye plus 1 اور پھر less than less than کر کے is unlucky grow salary equals sell of eye 0 net salary equals sell of eye 1 یہ ایک لمبی see out statement ہے کیونکہ ہم چاہتے ہیں کہ جی لائنے علیادہ علیادہ رہے ہیں تو اس see out کے ڈ کے اوپر ہم نے پھر new line character رکھا ہوا ہے تاکہ وہ ایک لائن print کر کے next line because چلا جائے جب یہ loop process ہوگی تو صرف وہ employees جن کے index position کے آگے ہم نے one لکھا تھا which were unlucky employees ان کے number اور ان کی salary اور ان کی grow salary اور net salary ایک لائنے تو سوچا ہم بڑھا ہم آگے تو ایک لئے جو پیر سوچا ہم بھر ایک لئے جو سوچا ہم بہت جو سوچا ہم پر بہت ہم پھر جو سوچا ہم پر بہت جو سوچا ہم پہلی رو پہلا کولم پہلی رو دوسرا کولم اس کو بھی کسی کیا جاتا ہے ایک چیز میں نے بہتا ہے کہ جب بھی آپ ملتی دیمینشن پہلے والے سکویر بریکٹس کے علاوہ باقی کہ آپ کو ویلیوز دے کے پاس کرنا پڑتا ہے otherwise receiving function کو نہیں پتا چا لگا اس ڈے کو مینیپلیٹ کیسے کرنا ہے یہ ہو گئی ہم نے ایک اور چھوٹیسی بات کی تھی کہ نم ایمپس کو get input function میں get کیا جائے یا mean میں کیا جائے اگر آپ input function میں get کرتے read کراتے تو آپ کو pass by reference کرنا پڑتا اور پھر reference وہ value واپس مین میں جاتی یا اس کو آپ global variable بناتے ہم نے کہا good programming practice global variable سے بچیں use it and perhaps get the input in the main function and pass it by value best option anyway so exercise do more problems do more stuff and learn how to manipulate arrays اب ہم چلتے ہیں آج کے next major topic پہ اور وہ مجر topic ہے pointer کیا بلا ہے actually we've already mentioned it and we have discussed it to a certain amount a pointer is a special type of variable جس کے اندر memory addresses ڈور کیے جاتی that is a simple definition a pointer is a variable it can be many varieties وہ ہم دیکھ لیں گے لیکن ایک variable ہے جس میں data value کی بجائے memory کا address ڈور ہوتا ہے how do we think about it in real life دیکھیں اگر میں کہوں کسی student کا نام لیکے کہ جی احمد کے گھر یہ چیز دے دینا so that is a reference by name احمد کا گھر اگر میں کہوں کہ جی تیرمی گلی میں چوتھے گھر میں یہ چیز دے دینا تو یہ ایک reference کے ساتھ ہے address کے ساتھ میں نے بتا ہے so exactly like that in the computer we can have x which is the name associated with the memory location or we can have the address of x saying memory location number 60000 or جو بھی ہو so normally ہم جب ویریبلز کی بات کرتے ہیں the variables are the names of specific locations in memory and when we talk about addresses then they are the addresses of those memory locations now in terms of can we use them interchangeably the answer is yes how do we use them دیکھیں اگر x کو میں نے value assign کرنی ہیں تو میں کہہ سکتا ہوں کہ جی x equal to 10 so 10 کی جو value ہے وہ اس memory location میں place ہو جائے گی جس کا label x ہے جنی جس کو ہم نے name x دیا ہوا ہے دوسا طریقہ یہی کرنے کا یہ ہے جی جس ایک پرچی کے اوپر memory location لکھی ہوئی ہے میں کہتا ہوں جو ایڈرس اس پرچی پہ لکھا ہے اس ایڈرس میں 10 لکھ دو so now I can say alright look at the پرچی and say okay 60000 location ایڈرس کی جگہ ہے so اس ایڈرس پہ جاکے 10 لکھ دو now اس کا نام شہد x ہو شہد y ہو شہد z ہو جو کہ ہم نے ordinary variables کی طرح حاصل کیا ہوا ہے لیکن ہم pointر کی طرح بھی وہی پہنچ سکتے ہیں pointر کی value ڈیٹرمین کرنے کے لیے ہمارے پاس operators ہیں اور operator کی مدد سے ہم جو memory location ہے اس کی value بھی حاصل کر سکتے ہیں so it's a two way street we use them all the time let's take another example suppose I won't take the name auditorium ہے بڑے سارے لوگ بیٹے ہوئے میں ایک لفافہ اٹھاکے ایک انام انامس کرنا چاہتا ہوں دو طریقے ہیں کرنے کے میں لفافہ کھولا اس میں سے دیکھا ہوں میں کہا جی احمد رشید آو اپنا انام لے لو that is a variable reference I do not know where احمد رشید is sitting in the audience مجھے نہیں پتا اس کا memory address کیا ہے میں کہتا ہوں جو بھی اس نام کا بندہ ہے وہ آکے اپنا انام لے لے دوسا طریقہ وہی لفافہ کھولا لیکن اندر احمد رشید نہیں لکھوا اس پر لکھا ہوئے seat number 83 آئی اپنا انام لے لے اس کس میں مجھے یہ نہیں پتا کہ seat number 83 پر کون بیٹھا ہوئے لیکن میں نے address سے بلا لیا تو دو سٹل چیزیں ہیں کام یہ کی ہوگا کجی انام دے دیا جائے گا in the first case by name in the second case by address so pointers are the way we use addresses how do we declare these so called pointer variables I already mentioned it in a previous lecture point to a particular data type so you can have a pointer to an integer you can have a pointer to a double a pointer to a character and so on so type has to be associated with the pointer pointer کا نام ہونا چاہیے it's a pointer variable so the rules apply variable naming rules and then there is a specific way of declaring it so for example اگر ہم نے declare کرنا ہو a pointer to an integer ہم لکھتے ہیں int star name where name is the variable name let's say we call it my pointer my ptr so we say int star my ptr semicolon star اور ptr کے درمیان ہم جگہ نہیں چھوڑتے یہ بھی ایک programming style والی بات ہے لیکن remember کے star جو ہے وہ int کے ساتھ associate نہیں ہو رہا وہ my ptr کے ساتھ associate ہو رہا ہے اور اس لین کو یا کوئی بھی لین declaration کی ہو جس میں pointers ہوں اس کو آسان پڑھنے کا طریقہ وہ یہ ہے آپ right to left پڑھیں so you will read it as my ptr is a pointer to an integer so self-explanatory ہو جاتی ہے ہم لکھتے ہیں double star x x is a pointer to data of type double I say 4 star c c is a pointer to a data of type character so simple enough whenever we are using these pointers they are going to store or hold memory addresses کون سے memory addresses suppose ایک variable ہے let's work with one example جو کہ int pointer کا ہے so declaration ہو گئی int star ptr ptr is a pointer to an integer ہم نے ایک اور integer لیڑیا int x یہ سب semi-colons لگ رہے ہیں کہیں پہ چالکہ ہم نے کہا x کو کوئی value دے the x is equal to 10 ہم چاہتے ہیں کہ پیٹیر کے اندر x کا ایڈرس آجائے تو وہ ایڈرس اپریٹر استمال کرتے ہیں which is the single ampersand so you can the and sign جو کیبوٹ پے بنا ہوئے so we say ptr equals and x what this does is x variable کی جو بھی memory location ہے اس کا ایڈرس پیٹیر کے اندر store کر دے گا آپ یہ پوچھ سکتے ہیں کہ پیٹیر جو ویریبل ہم نے declare کیا اس کی اپنی طائق کیا ہے is it an integer is it a double is it a character پیٹیر is a whole number کیا پوائنٹرز are whole numbers because وہ memory addresses کو ریفر کرتے ہیں اور اس کے لیے یہ ہوتا ہے کہ جی it is a whole number big enough to store any memory address بس یہ نہیں بتاتے کہ ہم کہ جی int ہے کہ long int ہے a short int ہے کیا ہے so it is a whole number but it normally is big enough to store any memory address of that computer so we have learnt how to take the address of a variable and store it in a pointer جو پوائنٹر میں address store ہوگیا تو جناب جس location کو وہ pointer point کر رہا ہے اس کی value کیسے لیں اس value کیلئے star operator استعمال ہوتا ہے the star the asterisk this is called the dereferencing operator ایک address operator تھا and the star is the dereferencing operator اس کے اندر ہم استعمال کرتے ہیں star ptr جیسے ہی آپ نے pointer variable کے ساتھ star لگا دیا اس کو پڑھنے کا طریقہ یہ ہے the value of whatever ptr points to this is important these things are something that should become reflexive action کہ جی آپ کو ایک program code کے اندر لائینزرائی int star ptr you say oh ptr is a pointer to integer آپ کو نظرائی لائین z is equal to star ptr times 2 you say oh z is equal to the value of whatever ptr points to multiplied by 2 so we do arithmetic we do any and all expressions like this میں کئی دفعہ یہ ذکر کر چکا ہوں کہ جب بھی کوئی cheese declare کریں تو اس کو initialize کوئی initial value دے دی نی چاہیے تا کہ ہمیں پتہ ہو کہ جی بعد میں جاکے یہ غلطی سے اس میں کوئی unknown value نہ پڑی ہو استمال کے وقت pointers کو کیسے starting value دی جائے ایک طریقہ تو یہی ہے کہ جی pointer must hold an address of something so کسی ویریبل کا ڈرس لے کے pointer میں store کر دو ابھی وہ ویریبل کی باری نہیں آئی تو pointer کو پھر بھی ہم initialize کرنا چاہتے ہیں تو کس سے کریں normally we will initialize or assign the first value to a pointer as either zero or the magic word null n-u-l-l capitals کے اندر یہ capitals کے اندر null کہاں سے آگیا ہے یہ سی لنگوچ کا حصہ ہے نہیں یہ سی لنگوچ کا یا سی پلس پلس کا حصہ نہیں ہے but it is a global constant declared in many of the header files جو اوپر ہم sharp include کے ساتھ include کرتے ہیں so by again good programming practice it's nicer to use a word جس کا کوئی مطلب سمجھائے so we say when we say ptr equals null we saying it's a null pointer it points to nothing at the moment the same thing would be ptr equals zero it points to nothing at the moment because zero will not be considered a valid memory address بعد میں جاکے جب ہم نے pointer کو استمال کرنا ہے اور استمال کا مطلب یہ ہے it is appearing on the right hand side of either an assignment statement or is being used as part of an expression اس وقت ptr must point to a valid memory address جہاں پہ کوئی چیز stored ہو اس کے لیے ہمارے پاس already طریقہ ہے we would say ptr equals and x and y or whatever کسی ویریبر کا address لے کے ہم ptr کے اندھا store کر دیں گے pointers کا ایک مطلب use جو ہے ہم نے پہلے دسکس کیا تھا c کے default جو ہے it is call by value whenever we are calling a function it is call by value sometimes we want a call by reference ابھی جو ہم نے problem complete کیا ہے salaries or employees or taxes والا اس کے اندھر بات کی تھی کہ جی اگر numamps variable جو ہے number of employees والا وہ اگر input function کے اندھر ہم اس کی value پر لیں keyboard سے تو وہ main program تاک کیسے پہنچے گا تو if you remember اگر main program اس کا address بھیج دے to the function تو پھر وہ value main تاک واپس آسکتی ہے it becomes a call by reference so one of the major uses of pointers is simulating a call by reference when we are using it with function calls اس کے اندھر ہم کرتے کیا ہے کہ function call کرتے وقت any main program میں any calling program کے اندھر ہم address operator استمال کر کے we send the address over اگر x ہے یا numamps ہے ہم اس کے آگے and sign لگا کے and numamps بھیجیں گے receiving function جو ہے اس کو پتا ہونا چاہئے کہ جی ایک address میرے پاس آرہا ہے تو اس کو declaration اس کی جو ہے receiving function کی لائیں وہ کہہ گا int star numamps so it will declare میرے پاس جو numamps ہے اس کا نام بدلا جا سکتا ہے function کے اندھر that is a pointer to an integer یہ receiving function کی جو declaration لائیں اس میں آگیا اور body کے اندھر اگر numamps کو استمال کرنا ہے scene کے ساتھ تو ہم کہیں گے scene greater than greater than star numamps why do we do that we say کہ keyboard سے جو value آرہی ہے اس کو store کر دو in the place wherever numamps is pointing to یعنی numamps کی value نہیں بدل نہیں because numamps کی value تو address ہے پر کہہ رہے ہیں اس address پی جو جگے ہے وہی ممری کا ہمیشہ آپ تصور رکھیں pigeon holes ہیں there are little holes boxes in the memory space اور boxes کے اوپر address numbers لگے میں then کہہ رہے ہیں numamps جس address کو point کرتا ہے اس کے اندھر جاکے value لکتو so whenever you using the value associated with the pointer you say star ptr یا star numamps in this case and whenever you using let's say the address then numamps is the address اور اس کو and sign کے ساتھ اسائن کیا جاتا ہے pointers جو ہیں they can appear on the left hand side exactly like ordinary variables but then on the right hand side you would have an address statement address جو ہے the and operator وہ expression کا نہیں ہوتا the address cannot be taken off x plus y the address can be either the the address of x or the address of y simple variables arrays کا case to have وہ صراصہ special ہے وہ آگے چل کے discuss کرتے ہیں you can for the moment be clear کے جی address operator operates on a simple variable so whenever we have a pointer on the left hand side the right hand side the address cannot be taken off an expression on the other hand if a pointer appears on the right hand side of an expression so it can participate in any expression so star ptr with ptr pointers جس چیز کو بھی point کر رہا ہے اس کی value ہمارے پاس آجاتی ہے and with value ہم جو بھی calculation کرنا چاہیں کر لیتی ہیں آگے چل کے ہم یہ بھی دیکھیں کہ pointers کے ساتھ بھی arithmetic کی جا سکتے ہیں that is itself ہاں دو ہی دیکھلئر ہم دو ہی always دیکھلئر پوانٹرز on separate لائنز جو ہم پہلے بھی کرتے ہیں کہ جی انٹ آئی جی کاما جی کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما کاما and x is an ordinary integer variable you can declare arrays on the same line so you could say int star ptr comma x comma a square brackets 10 ایک لین کے اندر ہم نے ایک pointer to an integer declare کیا ایک جو ہے simple integer variable declare کیا or ایک array declare کی of 10 integers so it is quite all right to mix declarations style wise the guideline is maybe you want things that are associated declared together that's a matter of evolution as you develop and you write more programs you'll develop your own style just remember the star is associated with the name of the pointer not with its type so یہ غلطی کبینہ کیجے گا کہ جی انٹ star ptr1 comma ptr2 comma ptr3 لکھ کے آپ سمجھیں کے جی ptr2 اور ptr3 بھی پوانٹرز بن گئے وہ پوانٹرز نہیں بنیں گے they will become ordinary integer variables so be careful about that let's now start using these pointers a little bit ابھی تو artificial manipulation ہوگی جیسے ہم کرتے رہتے ہیں ایک سامپل کے طور پے تو suppose that we have in't star y ptr ایک پوانٹر ہے اس کا نام ہے y ptr and it's a pointer of type integer اطلی بھی point to an integer comma why and why becomes an ordinary integer variable down the road we can say something like y is equal to 100 y ptr equals and y تو وائیکہ ایڈرس y ptr کند چلا گیا ہم کیوں کریں well i've already given you one specific use of pointers that is for simulating a call by reference if we want to pass the address of a variable into a function so that when it makes some changes the actual variable is also changed that is a call by reference we use pointers the other one is slightly more subtle but much more useful because suppose we have a function جس نے بار بار ایک ہی کام کرنا ہے but with different variables okay notice I didn't say different array values otherwise we know what to do with arrays by now I say it has to do the same thing but with different variables ایک طریقہ تو یہ ہے کہ جی ہر دفعہ اس کو کوئی اور variable pass کیا جائے by reference otherwise variable کی value بدلے گی دوسرا یہ ہے کہ جی اس کو point ڈرس کے ساتھ فنچن کو لکھ لیا جائے اور ہر دفعہ کال کرنے سے پہلے جو point ڈر ویریبرل ہے اس میں سیمپل ویریبرل کا ایڈرس دالا اور call بھیج دی so it's a call by reference automatically لیکن ایک ہی point ڈر ویریبرل بار بار استعمال ہو رہا ہے and every time it is holding the address of a different variable call by reference کا اور کوئی فائدہ ہے it's probably too early for you to determine کہ جی call by reference کا اور کیا فائدہ ہوتے ہیں لیکن let me try and step back a little bit and think in terms of کہ جی function call کیا جب کی جاتی ہے وہ میکنیزم کیا ہے take him what happens is کہ ہم ایک function میں جا رہے ہیں اور اس میں کچھ ویریبرل کو پاس کر رہے ہیں جو کہ function نے استعمال کرتے ہیں call by value میں یہ جو ویریبرل ہیں ان کی values کسی جگہ پہ لکھ دی جاتی ہیں اور پھر control جو ہے وہ چلا جاتا ہے function کے اندر function کو کہتے ہیں کہ بھئی یہ values تمہیں دی گئے ہیں وہ اس جگے سے وہ values کو اٹھا لیتا ہے so that is fine now suppose i have a huge number of values that i want to send to the function what do i do do i first copy all of these values into this different location and then call the function or should i just pass the reference and the example is an array کے ارے کے ام نے وہ saw employees کی information function کو بھیجنی ہے تو یا تو میں saw copies بنا کے اس کی کہیں پے رکھوں وہ جو میں کہیں پے رکھنے کی بات کر رہوں اس کو ہم stack کہتے ہیں but you will discuss that in data structures ڈیٹا سٹرہ میں ان کی copies بنا کے رکھوں اور پھر کہوں اب saw copy یہاں سے لیلو a very inefficient way of working on the other hand i could have said کے جی اس ارے کا ادرس میں نے دے دیا ہے اس جگے پہ سو چیزیں پڑی ہیں جو وہی سے پڑلو so no copies were ever made you just went to that location and you read the values but there is a problem problem یہ ہے کہ whenever we do a call by reference we are letting ourselves open to a variation or rather we can change the values that the address points to now sometimes that is what we want جو ہم نے وہ two dimensional ارے کا ایک امپل کیا تھا ہم نے کہا جی get input میں salary پڑھو اور وہ ارے میں لکھ دو اور وہ دوسرے function کو available ہو so we want that to happen other times for efficiency ہم address pass کرنا چاہتے ہیں تاکہ ساری ہمیں copy آنا بنانی چاہیں پڑھیں لیکن ہم چاہتے ہیں کہ جی اس ادرس کی manipلیٹ کرتے فے original copy نہ چینج ہو پائے اس کے لیے do we have a mechanism جو کہ یہ چیز رسٹرکٹ کر سکے and obviously میں نے اگر topic چیڑا ہے تو the answer is yes there is a way and that way has to do with the const keyword const keyword کے بارے میں ہم تھوڑا سا بعد میں آتے ہیں لیکن ایک اور جو ابھی آپ کو سمجھ آ جائے اس کے بارے میں بات کر لیں دیکھیں آپ نے introduction to computing کے اندر بھی bubble sort کا function کیا تھا آپ کو یاد ہے ایک ایرے آپ کو دی ہوئی ہے اس کو sort کرنا ہے اور ایک بڑی simple's کی brute force تیکنیک میں اس کو کہوں گا زور بازوز کرنے والی بات ہے bubble sort کر دو کیا کرتی تھی کہ جی دو دو values کو compared کرتے گے اور یا بڑی والی value سب سے نیچے لے گے یا چھوٹی والی اوپر لے گئے that's bubbling اور اس سے ہم ایرے کو sort کرتے تھے لیکن ایک کی چیز جو کہ bubble sort میں استعمال ہوتی تھی اور وہ بہت سارے algorithms کے اندر استعمال ہوتی ہے وہ ہے shopping of two values دیکھیں جب ہم بات کر رہے تھے two dimensional ڈرے کو transpose کرنے کی یا اور اس کی manipulation کی تو ہم نے وہاں پہ بھی shopping کی تھی اور shopping کے لیے ہم نے کہا تھا ایک temporary variable رکھو اس میں original value لکھتو original value پر نئی value ڈال دو اور جہاں پر نئی value لکھوی تھی وہ temporary value location سے value وہاں رکھو that's the standard swap problem is if I want to swap two variables let's say x and y can I do that with a function call not the main program میں تو میں کونگر 10p equals x x equals y y equals 10 shopping ہو گئی but can I call a function saying swap x comma y or swap function کی اندر جائیں تو وہ یہ کہہ رہا ہو 10p equals x x equals y y equals 10p اور واپس آجا ہے well you know the answer answer is this was a call by value x اور y کی values وہاں بھیجی گئیں وہ values کسی نئی memory location میں swap function کو ملی وہاں پہ وہ interchange ہو گئیں لیکن جب آپ واپس آئے تو original x اور y کی values وہیں کی وہاں ہی ہے because they were never passed by reference so here is another use of pointers which is a real use swap کا function لکھنا ہو تو آپ دو simple variables کو interchange کرنے کے لیے you have to use a call by reference اس کا example again you will find it in your handouts you take the address of one variable and you take the address of the second variable and pass that to the swap function so now we have code that looks something like this so the code basically becomes let's say y ptr equals and y x ptr equals and x swap y ptr comma x ptr receiving code جو ہے must know کی یہ addresses بھیجے جا رہے ہیں تو swap function کی declaration جو ہے وہ ہو جائے گی swap int star let's say y ptr comma int star x ptr so it's receiving pointers to integers now I said that this implemented a call by reference does it apply to let's say وہی bubble sort کا گا problem ہو لیکن bubble sort کیو کرنی ہم نے values وہ array میں store کی ہوئی ہیں تو یہ تیکنی کے استعمال ہو سکتی ہے answer is absolutely ہو سکتی ہے in fact that is what we need to do remember again I will reiterate when we pass an array the array is passed by reference but when we pass an array element it is passed by value so اگر array ہماری a ہے تو اس کا a of i a of 53 is a value okay so first of all you will take the address of this value so you will take the address of a of 53 and you will take the address of let's say a of 54 and then you will pass the addresses to the swap function یا تو اب پوری ارے کو بھیجیں پوری ارے کو بھیجیں گے تو پر swap function نہیں ہوگا وہ function بزاتے خود bubble sort ہوگا لیکن اگر bubble sort اپر level پہ لکھا بے اور وہ swap function کو call کرتا ہے تو you must pass the array elements by reference in other words take the address and send them over right let's take now a look at a slightly tricky piece of code this has to do with the declaration using the const keyword what how do we do this suppose ہمارے پاس ایک یہ لائن لکھی ہو int star const my ptr equals and x semi colon اس کو پرنے کا طریقہ کیا ہے again equal to ابھی چھوڑ دیں اور وہاں سے ہم right to left پرنے لگتے ہیں ہم کہہ رہے ہیں my ptr is a constant pointer to an integer constant pointer to an integer یہ کیا کرتا ہے آپ کو یاد ہوگا جب بھی ہم کانست کا کیورد استعمال کرتے ہیں تو وہ چیز کانسترنٹ ہو جاتی ہے وہ چیز کانسترنٹ ہو گئی تو بعد میں اس کو values assign نہیں کی جا سکتی تو when we said something like const int x تو immediately ہمیں کہنا پڑتا تھا equal to 10 یا equal to 0 اس کو value بھی assign کرنی پڑتی تھی کیونکہ جب آپ نے const int x کر دیا x is an integer constant تو بعد میں جا کے آپ x equal to 20 نہیں لکھ سکتے x کی value change نہیں ہو سکتی یہاں پہاں پہ اس لین پہ ہم نے declare کیا ہے my ptr is a constant pointer to an integer because it's a constant pointer it must always point to something immediately اور اس واتے ہم نے آگے equal to sign دیا اور کہا end x where x might be another variable جس کا address لیکے اس کے اندر لکھ دیا گیا اور اب یہ pointer نہیں چینچ ہو سکتا استعمال ہم کر سکتے ہیں کوئی فائدہ ہوا not much it is like giving another name to x so you can have x with two different names sometimes کبھی کوئی complex programming کی اندر آپ چاہیں گے کہ جی ایک جگہ پہ اس کو x بلایا جائے دوسی جگہ پہ اس کو my pointer بلایا جائے لیکن it's difficult to understand those conditions and normally I would argue against using pointers as constant references on the other hand کانسٹ کا کی برد تھوڑسی اس کی جگہ شفٹ کر دی جائے تو اس کا مطلب بدل جاتا ہے suppose we had the line which said کانسٹ انٹ سٹار my ptr now what does it say it says my ptr is a pointer to a constant integer اب کیا ہورا ہے کہ جی پوینٹر جو ہے اس کی value بدل سکتی ہے it can point to one or two or three لیکن جو value جو ہے اس لکیشن پر پڑی ہوئی وہ نہیں بدل سکتی اس چیز کا کوئی کام اس کا کام بہت کومن ہے لیکن میں ابھی تھوڑے در پہلے منشن کیا تھا کہ call by reference کی اندر ایک drawback بھی ہے efficiency تو ہے کہ جی وہ سوہ ویلیوز آپ کو کسی سٹاک پے نہیں لکھنی پڑیں اور function call نہیں کرنا پڑا آپ نے ایک address لکھ دیا function خود وہاں سے سوہ ویلیوز اٹھاتا رہے original location سے downside یہ ہے کہ جی اگر آپ چاہیں کہ وہ function original values کو چیج نہ کر سکے تو کوئی میکنیزم نہیں تھا اس کو تو آپ نے سب کچھی پکڑا دیا address دے دیا اس اٹھا اس اٹھرس پی چیزیں پڑی میں تو وہ جاکے اگر بدل دے تو values بدل جائیں گی at to original addresses when you return from the function something funny has happened but if the function کا proto tight جو ہے declare its receiving arguments with this type of construct which says const int star my pointer then it is saying کہ مجھے جو value دی جا رہی ہے وہ constant integer ہے your constant double it's a constant double value then the function cannot change that value so it's like having your cake and eating it too you've got the address of a memory location جس میں کوئی value پڑی ہوئی ہے لیکن اس address کو آپ استعمال کر سکتے ہیں for any other computation but you cannot change that value now in the main calling program that value could have been an ordinary variable any main program اس کی value بدلی جا سکتی ہے but when you send it to a function and the function receives it with its address as a constant something int or double or 4 or whatever pointer تو اس کا فیدہ جو ہے کہ function اس کی original value نہی بدل سکتا there are no side effects so this is a useful part so the ڈیلیسنگ or the ref creating a reference a new name for a variable wasn't very useful some situations it is but saving sending something by reference and preventing the called function from changing its value is a very very useful thing point is a lot more to be done with pointers چھوٹی سی چیز میں بتاتا چلوں ایرے آتی ہے بھئی ایرے کیا چیز ہے whenever I say int a 10 what are we saying a is an array of 10 integers بھئی ایک کا مطلب کیا ہے is it a simple variable name well obviously it's not a simple variable name it's the name of an array but what does a name of an array mean in real terms in terms of memory locations well it turns out کہ جا بات نے لکھا انٹ ایرے 10 تو کمپیوٹر نے ممری کے اندر دس انٹیجرز کی جگہ ریزورف کر دی جیک ہے اس کی دیمینشن جو ہے اور اس جگے کو ایک نام بھی دیا وہ نام جو ای ہے وہ کس لوکیشن کو ریفر کرتا ہے well it doesn't refer to all 10 it refers to the first any starting location of the array how does it refer that is the address so whenever we say int a 10 then a is the address of the starting location of the array this applies to character strings it applies to double string double arrays or character arrays whatever array the name of the array is an address and the address is the starting point the starting address of the array and this again applies to one dimensional arrays two dimensional arrays or however many dimensions we want to work with so arrays and pointers are very very intricately linked why because the name of the array itself is an address what is a pointer a pointer is a variable containing an address so we will work with pointers and arrays more in the subsequent lectures so آج کے لیکچر میں ہم نے اپنے کچھ جو پسلی دفعہ کا problem تھا اس کو continue کر کے conclude کیا اور پھر ہم نے pointers کے اوپر discussion شروع کی اور ان کی various properties اور کچھ justification دینے کی کوچھ کی کہ یہ کہاں پہ ہمارے لیے useful ہیں اور کہاں ہمارے لیے یہ اتنے زیادہ useful نہیں ہوتے مطلب ان کے ان کے اندر danger بھی ہوتا ہے جو arrays والا حصہ ہے we will discuss that in subsequent lectures so till that time اجازت ایجے خدا حافظ