For Android device For iOS device
១៥
ឧសភា

មេរៀនទី ១០៖ ការ​ប្រើ​ប្រាស់ Pointer

→ ទម្លាប់​ស្រាវជ្រាវ និងស្វែងយល់ពី​បច្ចេកវិទ្យា​ថ្មីៗ​ជាអ្វី​ដែល​និស្សិត IT គួរតែអនុវត្តន៍

→ មេរៀនទី១០នេះនឹងនាំ​ឲ្យ​អ្នកដឹង​នូវ​ចំណុច​ដូច​ខាងក្រោម​៖

- តើអ្វីទៅជា Pointer ?

- ទំនាក់ទំនងរវាង arrays និង pointers

- ការធ្វើប្រមាណវិធី pointers

- របៀប​ប្រើ​ new និង delete ដើម្បី​បង្កើត និងលប់ memory

- ការ​ប្រើ​ប្រាស់ const keyword ​ជាមួយនឹង pointers

- អ្វីទៅជា references ?

- ភាពខុស​គ្នា​រវាង pointers និង references

គ្រប់ variables ​ដែល​បាន​បង្កើត​គឺត្រូវការ​ទំហំ memory ពី RAM ​ទៅតាម​ប្រភេទ data របស់វា​ដែល​ត្រូវ​រក្សាទុក ។ ឧទាហរណ៍ថា បើសិនជា variables ​ដែល​មាន data ជា​ប្រភេទ char គឺវាត្រូវការ​ទំហំ memory ចំនួន១បៃត៏ (byte) តែបើសិនជា variables នោះមាន data type ជា int, long ឬ​ក៏ float ​ទំហំ memory ​ដែល​ពួកវាត្រូវការគឺចំនួន៤បៃត៏ (bytes) ប៉ុន្តែ​បើវាជា double គឺវាត្រូវការ៨បៃត៏ (bytes)

រាល់បៃត៏ (bytes) ​នីមួយៗ​គឺវាមានលេខ address របស់វារៀងៗ​ខ្លួន ដូច្នេះគ្រប់ address របស់ variables គឺជា address របស់ byte ទី១នៃ variable នោះ ។ ឧទាហរណ៍ ខ្ញុំ​មាន age variable ​ប្រភេទ​ជា int ដូច​ខាងក្រោម​៖

int age = 43; //age មាន​ប្រភេទ data ជា int ដូច្នេះ​ទំហំ memory របស់ age គឺចំនួន ៤bytes

ដូច្នេះ ឧបមាថាបើ byte ទី១របស់​តម្លៃ 43 ​ដែល​ជា​តម្លៃ​របស់ age variable ស្ថិតនៅចំ address 0x6afefc នោះនាំ​ឲ្យ memory address របស់ age variable គឺ 0x6afefc

​តម្លៃ 43 ​ក្នុង​ប្រព័ន្ធ​គោល១០ គឺ​ស្មើនឹង 0010 1011 ​ក្នុង​ប្រព័ន្ធ​គោល២

សូមមើល​រូបភាព Pic 10.1 បន្ទាប់នេះ

កូដ១០.១ បន្ទាប់នេះនឹង​បង្ហាញ​ឲ្យ​អ្នកឃើញកាន់តែច្បាស់អំពី address របស់ age variable

វិភាគ​លទ្ធផល output

នៅ​ក្នុង​កូដ១០.១ បន្ទាត់ទី៨ អ្នកបានឃើញ​ខ្ញុំ​ប្រើ​សញ្ញា & (ហៅថា address operator និងមានពេល​ខ្លះ​សញ្ញា & ​ត្រូវបាន​ហៅថា reference operator ​ដែល​អ្នកនឹង​សិក្សា​នៅ​ក្នុង​មេរៀនទី១១) នៅពីមុខ age variable និងស្ថិតក្រោយសញ្ញា extraction operator នេះ​បញ្ជាក់​ថា​ខ្ញុំ​កំពុង​ចាប់យក​តម្លៃ address របស់ age variable ដើម្បី​បង្ហាញ​ទៅកាន់ screen នៃ monitor

នៅ​ក្នុង​ភាសា C++ កាលណាគេ​ប្រើ​ប្រាស់​សញ្ញា & នៅពីមុខ variable ​បញ្ជាក់​ថាគេ​កំពុង​ធ្វើការ ជាមួយនឹង memory address របស់ variable នោះ ។

Memory address គឺសំដៅលើលេខសម្គាល់នៃទីតាំង​ដែល​ផ្ទុក​តម្លៃ​ដោយ variables លេខសម្គាល់​ទាំងនោះ​គឺ​ត្រូវបាន​សរសេរ​ក្នុង​ប្រព័ន្ធ​គោល១៦ ហៅថា hexadecimal ។ ចំណែក​ឯទីតាំង​ដែល​ផ្ទុក​តម្លៃ​ទាំងនោះ​ហៅថា computer memory និងតំណាងដោយ​ឈ្មោះ​សំគាល់ហៅថា variable

ការ​ប្រើ​ប្រាស់ unintptr_t (unsigned integer type) ក្នុង​បំណែក​កូដ​ខាងលើ ព្រោះ​ខ្ញុំ​ចង់​បំប្លែង memory address របស់ variables ពី​ប្រព័ន្ធ​គោល១៦ (hexadecimal value) ​ទៅកាន់​លេខ​ក្នុង​ប្រព័ន្ធ​គោល១០ (decimal value)

​ខ្ញុំ​សូម​បញ្ជាក់​ថា លេខ address របស់ age variable អាចនឹងមាន​តម្លៃ​ខុសពី​ក្នុង​លទ្ធផល output នៅ​ក្នុង​សៀវភៅនេះ សម្រាប់​កុំព្យូទ័រ​របស់អ្នក ។ សូមចងចាំថា memory address របស់ variables អាចនឹងប្រែប្រួលគ្រប់ពេលរាល់​ដំណើរ​ការ​កម្មវិធី​នៅ​ក្នុង​កុំព្យូទ័រ ទោះបីជា​ក្នុង​ ​កុំព្យូទ័រ​តែមួយ​ក៏​ដោយចុះ ។

♦ អ្វីទៅជា Pointers ?

Pointer ​ក៏​ជា variable ប៉ុន្តែ​តម្លៃ​ដែល​វា​រក្សាទុក​គឺជា memory address ដែល​ខុសពី variables ​ដទៃ​ៗ​ទៀត​ដែល​អ្នក​ធ្លាប់​បាន​សិក្សា​នៅ​ក្នុង​មេរៀនមុនៗ ។ ប៉ុន្តែ​តាមរយៈ pointer គឺអ្នកនៅតែអាច​ប្រើ​ប្រាស់​តម្លៃ​របស់ variables ​ដទៃ​ទៀតដោយប្រយោលបាន​ផងដែរ ។ ខាងក្រោម​នេះគឺជា​ទម្រង់​នៃការ​បង្កើត pointer variables នៅ​ក្នុង​ភាសា C++

PointedType * pointerName = nullptr;

PointedType សំដៅលើ data type របស់​តម្លៃ​ដែល pointer នឹងចង្អុលទៅ ឬ​អាចនិយាយបានថា ជា data type របស់តម្លែ​ដែល​នឹងស្ថិតនៅ​ក្នុង​ទីតាំង​ដែល​មាន memory address ​រក្សាទុក​ដោយ pointer variable នោះ ។

pointerName គឺសំដៅលើ​ឈ្មោះ​របស់ pointer ​ដែល​អ្នកចង់​បង្កើត ។ ជា​ទូទៅ​គេសម្គាល់ variable មួយជា​ប្រភេទ pointer គឺ​នៅពេល​ដែល variable នោះមានសញ្ញា * នៅពីមុខ ។

បើសិនជា pointer variable ​ណាមួយ​ត្រូវបាន​បង្កើត​ដោយពុំមាន​តម្លៃ​ចាប់ផ្ដើម គឺ pointer នោះនឹងចាប់យកដោយចៃដន្យ​នូវ​តម្លៃ memory address ​ណាមួយ​ពី RAM ដើម្បី​វា​រក្សាទុក​, pointer បែបនេះហៅថា wild pointer ។ ដូច្នេះ ដើម្បី​ចៀសវាង​បញ្ហា​នេះ pointer variables គប្បីត្រូវ​ផ្ដល់​តម្លៃ nullptr ទៅ​ឲ្យ​វា​ក្នុង​ពេលវា​ត្រូវបាន​បង្កើត​ព្រោះ nullptr នឹង​បញ្ជាក់​ថា​គ្មាន​អ្វី​ដែល pointer ត្រូវចង្អុល ។
ខាងក្រោម​គឺជាការ​បង្កើត
pointer variable មួយមាន​ឈ្មោះ​ថា pAge

int *pAge = nullptr;

សញ្ញា * នៅពីខាងមុខ​ឈ្មោះ variable បញ្ជាក់​ថា pAge គឺជា pointer variable ​ចំណែក​ឯ int ​បញ្ជាក់​ថា pAge គឺជា pointer ​ដែល​នឹង​រក្សាទុក memory address របស់ integer variable ​ណាមួយ ។ ឬ​អាចនិយាយបានថា pAge គឺជា pointer variable ​ដែល​នឹងចង្អុល​ទៅកាន់ int variable  ។  

 ​បញ្ជាក់​៖ nullptr គឺជា keyword ​ដែល​មាននៅ​ក្នុង C++11 ឡើង ។ សូមមើលរបៀប​រៀបចំ compiler GCC នៅ​ផ្នែក​បញ្ចប់​នៃសៀវភៅនេះ ឬ​អ្នកអាច​ប្រើ​ប្រាស់ NULL ជំនួសវិញ បើសិនជា C++ compiler ​ដែល​អ្នក​ប្រើ​នៅ​កម្រិត​ក្រោម C++11 

​សូមកុំ​យល់ថា pAge គឺជា variable ​ដែល​នឹង​រក្សាទុក​តម្លៃ​ប្រភេទ integer ​ឲ្យ​សោះ ។ សូមចាំ ថា pointer គឺអាច​រក្សាទុក​តម្លៃ​តែមួយ​ប្រភេទ​គត់គឺ memory address

អ្នក programmers ​ខ្លះ​អាច​ប្រើ style របស់ខ្លួន ដើម្បី​បង្កើត pointer variable ដូច​ខាងក្រោម​៖

int* pAge = nullptr;

គឺ​មានន័យថា​ពួកគេ​សរសេរ​សញ្ញា *  នៅជាប់ទៅនឹង data type ​តែម្ដង ។ ព្រោះ​ពួកគេ​ចង់​បង្ហាញ​ឲ្យ​កាន់តែច្បាស់ថា int មិនមែនជា data type របស់ pAge នោះទេ ប៉ុន្តែ​វាជា pointer ចង្អុល​ទៅកាន់ int 

♦ ការ​ផ្ដល់ address របស់ Variable ទៅកាន់ Pointer

អ្នក​ក៏​ទើបបានដឹងពីអ្វីទៅហៅថា memory address? និងរបៀបចាប់យក memory address របស់ variables ទាំងនោះ លើសពីនេះអ្នក​ក៏​បានដឹងអំពី​តួនាទី​របស់ pointer variables និងអំពីរបៀបនៃការ​បង្កើត pointer variables ​ទាំងនោះ​ផងដែរ ។

→ សម្រាប់​អត្តបទទាំងស្រុងនៃមេរៀនទី ១០ មានចំនួន ៥៦ទំព័រ នេះសូមអ្នក​ទាំងអស់​គ្នា​ចូលទៅ Download កម្មវិធី ANTLearner សម្រាប់ Android & Windows តាម Link ខាងក្រោម ៖   http://www.antclasses.com/help/page/download.html

→ សម្រាប់​មេរៀន C++ ក្នុង​កម្មវិធី ANTLearner សរុបមានចំនួន ១២មេរៀន គិតត្រឹមខែឩសភា ឆ្នាំ ២០២០ នឹងមានចំនួន ៥៤៥ទំព័រ Link Download សម្រាប់ Android https://play.google.com/store/apps/details?id=com.antkh.antlearning

​ក្នុង​នោះ​ផងដែរ​កម្មវិធី ANTLearner និង​ចូលរួម​ចំណែក​យ៉ាង​សកម្ម ក្នុង​ការបង្រៀន​វគ្គ online learning នៅអាន -ANT ដោយសិស្ស គ្រាន់តែ​ប្រើ​ប្រាស់ ID ដែល​ប្អូនៗ​បានចុះ​ឈ្មោះ​រៀននៅអាន -ANT ដើម្បី​ទាញយក​វីឌីអូ ឬ​ឯកសាផ្សេងៗ​ដែល​គ្រូ ឬ​សាលាបាន​ផ្ដល់​ឲ្យ​បំពេញ បន្ថែម​នូវ​ការង្រៀន​តាមរយៈ​online របស់យើង​ខ្ញុំ ។
→ ទាញយក​កម្មវិធី ANTLearner http://www.antclasses.com/help/page/download.html

​សម្រាប់​លោកអ្នក​ដែល​ចង់បានអត្ថបទ ចំណេះដឹង ឬ​វគ្គ​សិក្សា​បើកថ្មីៗ​នៅអាន-ANT សូមចុច Like លើ Page

https://www.facebook.com/ant.com.kh & https://www.facebook.com/anttrainning

​ប្រសិនបើ​លោកអ្នក​ចង់តាមដាន ឬ​មានចម្ងល់​ទាក់ទងនឹង​កម្មវិធី​ ANTLearner  ឬ​កម្មវិធី​ជា​ច្រើន​ទៀត​បង្កើត​ដោយអាន-ANT សូមចុច Like https://www.facebook.com/ANTTechnologyTrainingCenter

​ប្រសិនបើ​លោកអ្នក​មាន​បំណង​ចែករំលែង​ចំណេះដឹង​ IT ដល់សមាជិក​ដទៃ​សូមចូល​ទៅកាន់​ Group https://www.facebook.com/groups/ANTTrGroup/

. ​ប្រសិនបើ​មានចង្ងល់ ឬ​មាន​សំណួរ​ផ្សេងៗ​សូម​ផ្ញើ​សារចូល Facebook : https://www.facebook.com/anttrainning

→ លេខ​ទូរសព្ទ​ទំនាក់ទំនង ០១០/០១៦ ៦៦៦ ៦៥៣

💒ទីតាំង​ #86B ​ផ្លូវ​ 313 កែង 606 សង្កាត់បឹងកក់២ ទួលគោក

https://maps.app.goo.gl/cdi3hTED27tbHBaB9

មតិ និង​យោបល់​ទៅលើ​អត្ថបទ​នេះ (តាម Facebook)

ខាងក្រោម​នេះ​ជា​យោបល់​ផ្សេងៗ​របស់​អ្នកទស្សនា