งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

P O I N T E R ตัวชี้ Created By Tasanawan Soonklang Template PPT By

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "P O I N T E R ตัวชี้ Created By Tasanawan Soonklang Template PPT By"— ใบสำเนางานนำเสนอ:

1 P O I N T E R ตัวชี้ Created By Tasanawan Soonklang Template PPT By

2 ตัวแปร เป็นชื่อที่ใช้แทนข้อมูล หนึ่งๆ การประกาศตัวแปร เป็นการกำหนดชื่อเพื่อ ใช้แทนข้อมูล มีการจองเนื้อที่ใน หน่วย ความจำเพื่อ เก็บข้อมูล a int a; a = 10;

3 พอยเตอร์ หรือ ตัวชี้ ตัวแปรพอยเตอร์ (pointer) ทำหน้าที่เป็นตัวชี้ เก็บแอดเดรส (address) ของข้อมูล แอดเดรส คือ ตำแหน่งใน หน่วยความจำ pt r a int a; a = 10; 40 0 int *ptr; ptr = &a;

4 รูปแบบการประกาศ ใช้เครื่องหมาย * ตัวอย่างเช่น int *p; char *pch; ชนิดข้อมูล * ชื่อตัวแปรพอยเตอร์ ; การเข้าถึง ข้อมูล *p = 20; *pch = ‘x’; printf(“%d”,*p); printf(“%c”,*pch);

5 การกำหนดค่า ใช้เครื่องหมาย & คล้ายกับการใช้ scanf int a; scanf(“%d”,&a); ชื่อตัวแปรพอยเตอร์ = & ชื่อตัวแปรที่ต้องการชี้ ; 1int age; 2int *ptr; 3age = 25; 4ptr = &age;

6 การใช้งาน ข้อแตกต่างระหว่าง age และ & age age อ้างถึงค่าที่เก็บ ในตัวแปร &age อ้างถึงแอดเดรส ของตัวแปร 1int age; 2int *ptr; 3age = 25; 4ptr = &age; 5printf(“%d”,age); ptr Value of age age Address of age

7 การใช้งาน ข้อแตกต่างระหว่าง ptr และ * ptr ptr อ้างถึงแอดเดรส *ptr อ้างถึงค่าที่เก็บใน แอดเดรส 1int age, ru=10; 2int *ptr; 3age = 25; 4ptr = &age; 5printf(“%d”,age); 6*ptr = ru; ptr Value of age age Address of age *ptr) ; 10 10

8 1int age, ru=10; 2int *ptr; 3age = 25; 4ptr = &age; 5printf(“%d”,*ptr); 6*ptr = ru; 7printf(“%d”,*ptr); 1int age, ru=10; 2int *ptr; 3age = 25; 4ptr = &age; 5printf(“%d”,*ptr); 6ptr = &ru; 7printf(“%d”,*ptr); ptr 2525 age ru

9 #include main() { int *p,q; q = 100; p = &q; printf("%d", *p); } #include main() { int *p; float q, temp; temp = ; p = &temp; q = *p; printf("%f",q); } 100 can’t convert float to int

10 Pointer & Array พอยเตอร์และอาร์เรย์มีความสัมพันธ์กัน ชื่อตัวแปรอาร์เรย์จะเก็บแอดเดรสอยู่แล้ว สามารถใช้พอยเตอร์ชี้แทนการระบุ ตำแหน่ง (index) ได้ ทำงานได้รวดเร็วกว่า โดยเฉพาะเมื่อข้อมูล มีขนาดใหญ่ พอยเตอร์จะชี้ไปยังตำแหน่งแรกของ อาร์เรย์ อ้างถึงสมาชิกตัวใดๆ ได้โดยการกระทำ ทางคณิตศาสตร์ โดยใช้เครื่องหมาย ++, --, +, -

11 ตัวอย่าง 1int x[5] = {1,2,3,4,5}; 2int *ptr; 3ptr = x; 4ptr = &x[2]; ptr+1 อ้างถึงแอดเดรสของ x[1] ptr+2 อ้างถึงแอดเดรสของ x[2] *(ptr+2) อ้างถึงค่าของ x[2] x pt r X[2]

12 #include "stdio.h" int a[10] = {1,2,3,4,5,6,7,8,9,10}; main() { int *p; p = a; printf("%d %d %d\n",*p, *(p+1), *(p+2)); printf("%d %d %d",a[0],a[1],a[2]); } #include "stdio.h" char str[ ] = "Pointers are fun"; main() { char *p; int i; p = str; for(i=0;p[i];i++) printf("%c",p[i]); } Pointers are fun

13 #include "stdio.h" #include "ctype.h" main() { char str[80] ; int i; printf("Enter a string :"); gets(str); for(i=0;str[i];i++) str[i] = toupper(str[i]); printf("%s\n",str); for(i=0;str[i];i++) str[i] = tolower(str[i]); printf("%s\n",str); } Enter a string: ThAiLaNd THAILAND thailand char *p; p = str; while(*p) { *p = toupper(*p); p++; } printf("%s\n",str); while(*p) *p++ = tolower(*p);

14 #include "stdio.h" #include "string.h" char str1[] = "Pointers are fun"; main() { char str2[80], *p1, *p2; p1 = str1+strlen(str1)-1; p2 = str2; while(p1>=str1) { *p2 = *p1; *p1--; *p2++; } printf("%s\n%s",str1,str2); } Pointers are fun Nuf era sretnioP *p2++ = *p1--;

15 #include #define n 5 char days[ ][10] = {"monday","tuesday","wednesday", "thursday", "friday""}; void print_strings(char *table[ ], int num); main() { print_strings(days,n); } void print_strings(char *table[ ], int num) { int i; for (i = 0; i < num; i++) printf(“%d %s\n", table[i], table[i]); } 0000 monday 0007 tuesday 0015 wednesday 0025 thursday 0034 friday *days[ ] *(days+0) -> days[0] = “monday” *(days+1) -> days[1] = “tuesday” *(days+2) -> days[2] = “wednesday” *(days+3) -> days[3] = “thursday” *(days+4) -> days[4] = “friday” *(days + i)

16 days[0 ] days[1 ] days[2 ] days[3 ] days[4 ] days[0] days[0]+0 *(days+0) days[4]+2 *(days+4)+2

17 ใช้ index ในการอ้างถึงค่า 1. เขียนโปรแกรมเก็บค่าสตริง 2 ค่า ขนาดไม่เกิน 30 ตัวอักษรในอาร์เรย์ A และ B 2. ทำการสลับค่าข้อมูลในตัวแปร อาร์เรย์ทั้งสอง 3. แสดงผลในค่าอาร์เรย์ทั้งสอง Enter string1: Computer science Enter string2: Information technology Swap strings String1 = Information technology String2 = Computer science ใช้ pointer ในการอ้างถึงค่า 1. เขียนโปรแกรมเก็บค่าสตริง 2 ค่าไม่ ระบุขนาดโดยใช้พอยเตอร์ A และ B 2. ทำการสลับค่าข้อมูลในตัวแปรพอย เตอร์ทั้งสอง 3. แสดงผลในค่าพอยเตอร์ทั้งสอง Lab 10

18 1. กำหนดตัวแปรสตริงเพื่อเก็บข้อความ ขนาดไม่เกิน 80 คำ 2. ตรวจสอบสตริงว่ามีกี่คำ 3. เก็บแต่ละคำในอาร์เรย์ของตัวแปร สตริงแบบพอยเตอร์ 4. แสดงผลลัพท์โดยพิมพ์ จำนวนคำทั้งหมด คำ และ ความยาวของคำ Enter string: The representation of objects of the type is hidden from the program units. 15 words WordsLength The3 representation14 of2 objects7 …... Homework Lab 10

19 #include void main() { int age; int *pointer; printf(“How old are you : ”); scanf(“%d”,&age); printf(“You are %d years old.\n”,age); pointer = &age; *pointer =50; printf(“You are %d years old. \n, age); } How old are you: 18 You are 18 years old. You are 50 years old. pointer Value of age age Address of age

20 Pointer & Function ใช้ส่งผ่านค่าไปยังฟังก์ชั่นได้ ใช้ในการคืนค่ากลับจากฟังก์ชั่นได้มากกว่า 1 ค่า ใช้ในการรับส่งค่าอาร์เรย์ให้กับฟังก์ชั่นได้ เรียกว่า call-by-reference

21 #include "stdio.h“ void swap (int p, int q) { int tmp; tmp = p; p = q; q = tmp; } main() { int a = 6, b = 2; printf("a = %d, b = %d\n", a, b); swap(a, b); printf("a = %d, b = %d\n", a, b); } a = 6, b = 2 tmp = p; p = q; q = tmp; สลับค่า (swap) Call-by-value

22 #include "stdio.h“ void swap (int *p, int *q) { int tmp; tmp = *p; *p = *q; *q = tmp; } main() { int a = 6, b = 2; printf("a = %d, b = %d\n", a, b); swap(&a, &b); printf("a = %d, b = %d\n", a, b); } a = 6, b = 2 a = 2, b = 6 Call-by-reference

23 #include "stdio.h“ void swap (int *, int *) main() { int a = 6, b = 2; printf("a = %d, b = %d\n", a, b); swap(&a, &b); printf("a = %d, b = %d\n", a, b); } void swap (int *p, int *q) { int tmp; tmp = *p; *p = *q; *q = tmp; } a = 6, b = 2 a = 2, b = 6

24 #include void change(int p) { p = 50; printf(“Now num = %d\n”, p); } void main() { int num=20; printf(“Before num = %d\n”,num); change(num); printf(“After num = %d\n”, num); } Before num = 20 Now num = 50 After num = 20 * * * change(&num); Before num = 20 Now num = 50 After num = 50

25 #include int num1, num2; void input() { printf(“\n Input number1 : ”); scanf(“%d”,&num1); printf(“\n Input number2 : ”); scanf(“%d”,&num2); } void main() { input(num1,num2); printf(“%d %d”, num1,num2); } Input number1 : 15 Input number2 :

26 #include void input(int a, int b) { printf(“\n Input number1 : ”); scanf(“%d”, a); printf(“\n Input number2 : ”); scanf(“%d”, b); } void main() { int num1, num2; input( num1, num2); printf(“%d %d”, num1,num2); } Input number1 : 15 Input number2 : & & & & * *

27 #include void input(int *, int *); int adder(int a, int b) { return a+b; } void main() { int num1, num2,result; input(&num1,&num2); result = add(num1, num2); printf(“%d”, result); } void adder(int a, int b, int *add) { *add = a+b; } add(num1, num2,result);

28 May the Force be with YOU. Thanks, your watching. …^( ^ ^ )^...


ดาวน์โหลด ppt P O I N T E R ตัวชี้ Created By Tasanawan Soonklang Template PPT By

งานนำเสนอที่คล้ายกัน


Ads by Google