Presentation is loading. Please wait.

Presentation is loading. Please wait.

មេរៀនទី៧ Pointer C/C++ for beginner រៀបចំ និងបង្រៀនដោយ៖ អ៊ិន សុភា

Similar presentations


Presentation on theme: "មេរៀនទី៧ Pointer C/C++ for beginner រៀបចំ និងបង្រៀនដោយ៖ អ៊ិន សុភា"— Presentation transcript:

1 មេរៀនទី៧ Pointer C/C++ for beginner រៀបចំ និងបង្រៀនដោយ៖ អ៊ិន សុភា
C# Database C/C++ for beginner មេរៀនទី៧ Pointer រៀបចំ និងបង្រៀនដោយ៖ អ៊ិន សុភា Tel: /

2 អ្វីជា Pointer? Pointer ជាvariable ណាមួយដែលផ្ទុក momory address របស់ Variable ណាមួយផ្សេងទៀត, គ្មានផ្ទុកតម្លៃទេ ។ ឧទាហរណ៍ៈ int num1=10; // num1 ជា variable មានតម្លៃស្មើ 10 int *p;​ // declaration ទិន្នន័យជាចំនួនគត់មាន address គឺ p p = &num1;​ // p ទទួលតម្លៃ​ address របស់ num1 ដំបូង Pointer p គ្មានផ្ទុកតម្លៃទេ តែក្រោយពេលមាន assignment p=&num1 នោះ p និង​ point ទៅ num1 ។ ពេលនោះ pointer ជា variable ផ្ទុកតម្លៃ address នៃ memory របស់ num1 ។ ហើយ​ p ខ្លួនឯងក៏ មាន address ផ្ទាល់ខ្លួនដែរគឺ &p ។

3 Pointer ត្រូវបានប្រើប្រាស់ក្នុងគោលបំណង ៖ Reference(&): គ្រប់គ្រងនូវ Address Dereference(*): គ្រប់គ្រងតម្លៃនៃAddress

4 Syntax: DataType * pName; Example:
int *p=NULL; //ជាទូទៅបើមិនបានបោះ Addressណាមួយទៅឱ្យវាទេ នោះវានឹង point to NULL int num=90; //…. p=&num; //ផ្តល់តម្លៃជា address របស់ num ទៅកាន់ p (គេហៅថា reference) cout<<*p; //ទាញតម្លៃពី address ដែលត្រូវបានគ្រប់គ្រងដោយ p (គេហៅថា deference) DataType * pName;

5 p point ទៅកាន់ address របស់ num
Memory Address Data 0x28fea8 0x28fea4 90 0x28fea0 0x28fe9c 0x28fe98 p 0x28fea4

6 const Pointer What is difference between them??? const int *pOne;
int * const pTwo; const int * const pThree; pOne: is a pointer to a constant Integer. តម្លៃដែលវា point ទៅគឺមិនអាចធ្វើការផ្លាស់ប្តូរបាន​តាម រយៈ pOne បានឡើយ។ Ex: int b=10; const int *pOne= &b; *pOne=40; pTwo: is a constant pointer to an Integer. តម្លៃដែលវា point ទៅគឺអាចធ្វើការផ្លាស់ប្តូរបាន​ ប៉ុន្តែ pTwo គឺមិន អាច point ទៅកាន់ variable ណាមួយផ្សេងទៀតបានឡើយ។ Ex: int a=5,b=10; int * const pTwo= &b; pTwo= &a; pThree: is a constant pointer to a constant Integer.តម្លៃដែលវា point ទៅគឺមិនអាចធ្វើការផ្លាស់ប្តូរបាន​តាម រយៈ pThree បានឡើយ និង pThree គឺមិនអាច point ទៅកាន់ variable ណាមួយផ្សេងទៀតបានឡើយ។ What is difference between them???

7 លំហាត់ ១). ប្រកាស Number ជាប្រភេទ Integer ជាមួយតម្លៃចាប់ផ្តើម ៥០
២). ធ្វើការបង្ហាញតម្លៃរបស់ Number មកលើ screen ៣). ធ្វើការបង្ហាញ address របស់ Number មកលើ screen ៤). ប្រកាស Pointer មួយឈ្មោះ pNumber pointing to Number ៥). ធ្វើការបង្ហាញតម្លៃរបស់ pNumber មកលើ screen ៦). ធ្វើការបង្ហាញ address របស់ pNumber មកលើ screen ៧). ផ្លាស់ប្តូរតម្លៃរបស់ Number មក ១០០ បន្ទាប់មកធ្វើលំហាត់ទី២ និង ទី៣ ម្តងទៀត។ ៨). ផ្លាស់ប្តូរតម្លៃរបស់ Number មក ២០០ តាមរយះ pNumber បន្ទាប់មកធ្វើលំហាត់ទី២ និង ទី៣ ម្តងទៀត។

8 Pointer to Array Name ឬក៏ ឬក៏
-Array គឺជា constant pointer, point ទៅកាន់ធាតុដំបូងបំផុតរបស់ Array។ Ex: int numbers[3]={10,30,20}; cout<<*numbers; //it’s number[0] -របៀបបង្ហាញ Addresses for(int i=0;i<sizeof(numbers)/sizeof(int);i++) cout<<&numbers[i]<<endl; cout<<(numbers+i)<<endl; -របៀបបង្ហាញ Values cout<<numbers[i]<<endl; cout<<*(numbers+i)<<endl; Memory Address Data 0x28fea8 0x28fea4 10 0x28fea0 30 0x28fe9c 20 0x28fe98 ឬក៏ ឬក៏

9 int numbers[3]={10,30,20}; int *p=numbers;
cout<<p<<endl;//pointer to the address of the 1st element =>0x28fea4 cout<<*p<<endl;//1st element =>10 cout<<*(p+1)<<endl;//2nd element => 30 cout<<*p +1<<endl;//? =>11 cout<<*(p+2)<<endl;//3rd element=>20 for(int i=0;i<sizeof(numbers)/sizeof(int);i++) cout<<*(p+i)<<endl; Memory Address 0x28fea8 0x28fea4 10 0x28fea0 30 0x28fe9c 20 0x28fe98

10 Pointer to an Array V.S an Array of Pointers
int numOne[5]; int *numTwo[5]; int *numThree=new int[5]; numOne ជាArray មានធាតុ 5 ដែលធាតុនិមួយៗជា int object ។ numTwo ជា Array មានធាតុ 5 ដែលធាតុនិមួយៗជា pointer ចង្អុលទៅ int object ។ numThree ជា pointer មួយចង្អុលទៅ Array មួយដែលមាន 5 ធាតុនៃ int object ។

11 លំហាត់ ១). ប្រកាស Array មួយដែលមាន ១០​ ធាតុហើយ initialize តំលៃរបស់វា
២). បង្កើត Pointer ចង្អុលទៅ Array នោះ ៣). ធ្វើការបង្ហាញតំលៃរបស់ធាតុនិមួយៗដោយប្រើប្រាស់ Pointer ៤). រកតម្លៃតូចបំផុតរបស់ Array នោះដោយប្រើប្រាស់ Pointer 5). Sort តម្លៃពីតូចទៅធំរបស់ Array នោះដោយប្រើប្រាស់ Pointer

12 Pointers and multi-dimensional arrays
Ex: int num[2][3]={{10,20,30},{40,50,60}}; -របៀបបង្ហាញ Addresses for(int row=0;row<sizeof(num)/sizeof(num[0]);row++) { for(int col=0;col<sizeof(num[0])/sizeof(int);col++) cout<<&num[row][col]<<"\t"; cout<<(num[row]+col)<<"\t"; cout<<endl; } ឬក៏

13 Pointers and multi-dimensional arrays
Ex: int num[2][3]={{10,20,30},{40,50,60}}; -របៀបបង្ហាញ Values for(int row=0;row<sizeof(num)/sizeof(num[0]);row++) { for(int col=0;col<sizeof(num[0])/sizeof(int);col++) cout<<*(num[row]+col)<<"\t"; cout<<*(*(num+row)+col)<<"\t"; cout<<endl; } Tip: int *p=num;//Because num will not return a pointer to integer. num return a pointer to 1D array of 3 integers. int *p=num[0]; int (*p)[3]=num; //Declaring pointer to 1D array of 3 integers ឬក៏


Download ppt "មេរៀនទី៧ Pointer C/C++ for beginner រៀបចំ និងបង្រៀនដោយ៖ អ៊ិន សុភា"

Similar presentations


Ads by Google