LAB # 6 Pointer
ตัวแปร / พอยน์เตอร์(Pointer) ตัวแปรคือ พื้นที่ หน่วยความจำที่ใช้เก็บข้อมูล พื้นที่ หน่วยความจำ มีชื่อตัวแปรกำกับอยู่ สามารถเปลี่ยนแปลงแก้ไขค่าข้อมูลได้ผ่านชื่อตัวแปร พื้นที่ หน่วยความจำถูกสร้างโดยอัตโนมัติเมื่อมีคำสั่งประกาศตัวแปร เช่น float a; ถูกทำลายอัตโนมัติเมื่อไม่มีใช้งาน ตัวอย่าง Memory 65000-65001 65002 x y ….. main(){ int x; char y; } 30 a x = 30; y = ‘a’;
ตัวแปร / พอยน์เตอร์(Pointer) เมื่อประกาศใช้งานแล้วจะมีพื้นที่ หน่วยความจำ (2 bytes) เพื่อเก็บตำแหน่ง หน่วยความจำอื่น เราสามารถใช้ Pointer เพื่อแก้ไขค่าข้อมูลใน หน่วยความจำอื่นได้ พื้นที่ หน่วยความจำ ถูกสร้างโดยอัตโนมัติ (2 bytes) เมื่อมีการใช้คำสั่ง float * p; ถูกทำลายอัตโนมัติเมื่อไม่มีใช้งาน ตัวอย่าง Memory 65000-65001 65002-65003 x y ….. main(){ int x; int *y; } 40 30 65000 x = 30; y = &x; *y = 40;
p x y p x y p x y p x y ตัวอย่าง I 50 50 100 65000 100 50 65006 100 65004 p 65000 x 65002 y main(){ int x; int y; int *p; } 65004 p 50 65000 x 65002 y x=y= 50; 65004 p 50 65000 x 65002 y p = &x; 100 65000 *p = 100; *p = new int; 65004 p 100 65000 x 50 65002 y 65006 65006 100 *p = x;
p p ตัวอย่าง II 50 50 100 main(){ } 65004 65006 int *p; *p = new int; cout << *p; 65004 p 65006 50 65008 100 *p = new int; *p = 100; delete p;
ให้นักศึกษา ศึกษาตัวอย่างและการกำหนดตัวแปร Pointer และทำความเข้าใจ /*Program : pointer1.cpp Process : disply address value of variable */ #include <iostream.h> void main() { int number1=250; //integer variable float number2=1005.25; //float variable double number3=1254025.25212; //double variable int* int_pointer; //pointer variable float* float_pointer; //pointer variable double* doub_pointer; //pointer variable char* char_pointer; //pointer variable //display address by & operator cout<< "Display address of variable by & operator"<<endl; cout<< "Address of number1 = "<<&number1<<endl; cout<< "Address of number2 = "<<&number2<<endl; cout<< "Address of number3 = "<<&number3<<endl<<endl; // set address from memory to pointer variable int_pointer = &number1; float_pointer = &number2; doub_pointer = &number3; //display address by pointer variable cout<< "Display address from pointer variable "<<endl; cout<< "Address of number1 = "<<int_pointer<<endl; cout<< "Address of number2 = "<<float_pointer<<endl; cout<< "Address of number3 = "<<doub_pointer<<endl; }
ให้นักศึกษา ศึกษาตัวอย่างและการกำหนดตัวแปร Pointer แบบ void /*Program : pointer2.cpp Process : disply void pointer type */ #include <iostream.h> void main() { int number1=250; //integer variable float number2=1005.25; //float variable double number3=1254025.25212; //double variable void* many_ptr; //pointer of many type of variable //display constant at address in pointer variable cout<< "Display address from 'void* many_ptr' pointer"<<endl; many_ptr = &number1; cout<< "Address of number1 integer...many_ptr = "<<many_ptr<<endl; many_ptr = &number2; cout<< "Address of number2 float...many_ptr = "<<many_ptr<<endl; many_ptr = &number3; cout<< "Address of number3 double...many_ptr = "<<many_ptr<<endl; }
ให้นักศึกษา ศึกษาตัวอย่างและการกำหนดตัวแปร Pointer ในรูปแบบของ Array และทำความเข้าใจ /*Program : pointer3.cpp Process : disply relation array and pointer */ #include <iostream.h> void main() { int number[5]= {10,20,30,40,50}; //integer variable int i; int* num_ptr; num_ptr = &number[0]; //same as write this => num_ptr = &number[0] //display by index cout<<"Display constant by index of array"<<endl; for(i=0;i<=4;++i) cout<<"number"<<i<<" = "<<number[i]<<endl; //display by pointer of array cout<<endl<<"Display constant by * (indirect operator) of pointer"<<endl; cout<<"number"<<i<<" = "<< *(num_ptr+i) <<endl; //display by * (indirect operator) of array cout<<endl<<"Display constant by * (indirect operator) of array name"<<endl; cout<<"number"<<i<<" = "<< *(number+i) <<endl; }
ให้นักศึกษา ศึกษาตัวอย่างรูปแบบการส่งผ่านค่าแบบ Pass by Reference /*Program : pointer4.cpp Process : passed argument by reference */ #include <iostream.h> //prototype function void CelToFah(float& degree); void main() { float celsius; cout<< "Enter Celsius degree for convert to Fahenhiet : "; cin>>celsius; //call function and passed argument by reference CelToFah(celsius); //value of celsius will return and changed cout<< "Result = "<<celsius<<" Fahrenhiet degree"; } void CelToFah(float& degree) //function convert Celsius to Fahrenhiet { degree = degree*9/5+32; ให้นักศึกษา ศึกษาตัวอย่างรูปแบบการส่งผ่านค่าแบบ Pass by Reference /*Program : pointer5.cpp Process : passed argument by pointer */ #include <iostream.h> //prototype function void CelToFah(float* degree); void main() { float celsius; cout<< "Enter Celsius degree for convert to Fahenhiet : "; cin>>celsius; //call function and passed argument by address of celsius CelToFah(&celsius); //value of celsius will return and changed cout<< "Result = "<<celsius<<" Fahrenhiet degree"; } void CelToFah(float* degree) //function convert Celsius to Fahrenhiet { //* operater refer to value at address in degree pointer *degree = (*degree)*9/5+32; ให้นักศึกษา ศึกษาตัวอย่างรูปแบบการส่งผ่านค่าแบบ Pass by Pointer
ให้นักศึกษา ศึกษาตัวอย่างรูปแบบการส่งผ่านค่าแบบ Pass by Value #include <iostream.h> void exchange (int x, int y); void main () { int a = 5; int b = 9; cout << "This program attempts to exchange two values." << endl; cout << "Values before the exchange:" << endl; cout << "a= " << a << " b= " << b << endl; exchange(a, b); // code that calls the function cout << "Values after the exchange:" << endl; } // function for passing by value void exchange (int x, int y) { int temp; temp = x; x = y; y = temp; } // end exchange #include <iostream.h> void exchange (int * x, int * y); void main () { int a = 5; int b = 9; cout << "This program exchanges 2 values." << endl; cout << "Values before the exchange:" << endl; cout << "a= " << a << " b= " << b << endl; exchange(&a, &b); // code that calls the function cout << "Values after the exchange:" << endl; } // function for passing by address (or pointers) void exchange (int * x, int * y) { int temp; temp = *x; *x = *y; *y = temp; return; // Optional for void functions } // end exchange ให้นักศึกษา ศึกษาตัวอย่างรูปแบบการส่งผ่านค่าแบบ Pass by Value ให้นักศึกษา ศึกษาตัวอย่างรูปแบบการส่งผ่านค่าแบบ Pass by Pointer #include <iostream.h> void exchange (int& x, int& y); void main () { int a = 5; int b = 9; cout << "This program exchanges 2 values." << endl; cout << "Values before the exchange:" << endl; cout << "a= " << a << " b= " << b << endl; exchange(a, b); // code that calls the function cout << "Values after the exchange:" << endl; } // function for passing by reference void exchange (int& x, int& y) { int temp; temp = x; x = y; y = temp; return; // Optional for void functions } // end exchange ให้นักศึกษา ศึกษาตัวอย่างรูปแบบการส่งผ่านค่าแบบ Pass by Reference
ให้นักศึกษา ศึกษาตัวอย่างและการกำหนดตัวแปร Pointer คำสั่ง new และทำความเข้าใจ /* pointers.cpp, demonstrate use of pointers */ #include <stdlib.h> #include <iostream.h> void main() { int x, *p1, *p2; x = 1; p1 = new int; *p1 = 5; p2 = new int; *p2 = 3; cout << "p1 is " << *p1 << "\np2 is " << *p2 << "\nx is " << x << endl; x = *p2; p1 = &x; }
1.1 จงวาดรูปแสดงผลลัพธ์ที่ได้จากการใช้คำสั่งของ pointer ข้างล่างนี้ unknown x y z p main() { int x,y,z; int *p; p = &x; *p = 1; p =&y; *p = 3; p=&z; *p = y; } unknown x y z p unknown x y z p unknown x y z p Lab6-11.cpp
1.2 จงวาดรูปแสดงผลลัพธ์ที่ได้จากการใช้คำสั่งของ pointer ข้างล่างนี้ main() { int *p; p = new int; *p = 30; p=new int; *p = 40; *p = 50; delete p; } unknown p Lab6-12.cpp
1.3 จงหาผลลัพธ์จากโปรแกรมต่อไปนี้ #include <iostream.h> void main() { int x, y, *p, *q; p = new int; *p = 7; x = *p + 2; y = *p; q = new int; *q = *p / 2; *q = *q * 4; cout << x << y << *p << *q; } Lab6-13.cpp
2. จงเขียนโปรแกรมเพื่อทำการหาค่าเลขยกกำลังโดยที่ให้กรอกเลขยกกำลังและกรอกเลขชี้กำลังโดยให้เขียนฟังก์ชันชื่อ power(int x,int y) เพื่อคำนวณค่า ของ xy โดยในโปรแกรมหลักรับค่าของ x และ y โดยมีการส่งค่าแบบ Pass by Reference และ Pass by Address ตัวอย่าง Output Enter X : 3 Enter Y : 4 Value of 3 power 4 = 81 Lab6-2.cpp
3. จงเขียนโปรแกรมเพื่อรับ string แล้ว กลับ string จาก ซ้ายไปขวา ดังตัวอย่าง Lab6-3.cpp Example 1 Enter string = Hello Reverse string = olleH Example 2 Enter string = live Reverse string = evil Example 3 Enter string = abcdef Reverse string = fedcba Example 4 Enter string = fedcba Reverse string = abcdef Example 5 Enter string = stand Reverse string = dnats Example 6 Enter string = than Reverse string = nath หมายเหตุ สีเขียวแสดงข้อมูลที่ป้อน, สีแดงแสดงผลลัพธ์