ឧសភា
មេរៀនទី ១០៖ ការប្រើប្រាស់ 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 សង្កាត់បឹងកក់២ ទួលគោក
មតិ និងយោបល់ទៅលើអត្ថបទនេះ (តាម Facebook)
ខាងក្រោមនេះជាយោបល់ផ្សេងៗរបស់អ្នកទស្សនា