ตัวแปรประเภทตัวชี้ (Pointer)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
ชนิดของข้อมูลในโปรแกรม Interactive C
Advertisements

Pointers. Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้
Arrays.
ครั้งที่ 9 Function(ต่อ).
โครงสร้างโปรแกรมภาษา C
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ตัวแปรชุด การเขียนโปรแกรมภาษาคอมพิวเตอร์ 1
การเขียนโปรแกรมด้วยคำสั่งเบื้องต้น
ข้อมูลชนิดอาร์เรย์ Array (บทที่ 5)
Introduction to C Programming
Department of Computer Business
การรับค่าและแสดงผล.
พอยน์เตอร์ (Pointer) Chapter Introduction to Programming
ข้อมูลชนิดโครงสร้าง (Structure Data)
ตัวแปรชุด (Array) Chapter Introduction to Programming
บทที่ 11 การเขียนโปรแกรมโดยใช้ข้อมูลชนิดพอยท์เตอร์
Principles of Programming
Principles of Programming
ตัวแปรชนิดโครงสร้าง (Structure)
Data Type part.III.
หลักการโปรแกรม 1 Lecture 3: ตัวแปร, นิพจน์คณิตศาสตร์, การคำนวณทางคณิตศาสตร์,การดำเนินการกับสายอักขระ.
ทบทวน อาร์เรย์ (Array)
Structure Programming
Array.
Week 6 ประกาศค่าตัวแปร.
การแสดงผล และการรับข้อมูล
รับและแสดงผลข้อมูล.
ตัวชี้ P O I N T E R Created By Tasanawan Soonklang
อาเรย์ (Array).
ตัวแปรชุด.
Lecture no. 6 Structure & Union
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
Arrays.
Arrays.
บทที่ 12 Structure and union Kairoek choeychuen
บทที่ 6 ตัวแปรอาร์เรย์ (Array of Variable)
C Programming Lecture no. 9 Structure.
C Programming Lecture no. 6: Function.
ข้อมูลชนิดอาร์เรย์ ประเภทของข้อมูลที่ผ่านมาส่วนใหญ่ในตอนต้นๆจะเป็นข้อมูลเดี่ยว โดยตัวแปรหนึ่งตัวสามารถเก็บข้อมูลได้หนึ่งตัว ถ้าหากต้องการเก็บข้อมูลหลายตัวจะต้องประกาศตัวแปรหลายตัว.
บทที่ 11 การเขียนโปรแกรมภาษาซี
ข้อมูลพื้นฐานและตัวดำเนินการ
หน่วยที่ 14 การเขียนโปรแกรมย่อย
อาร์เรย์และข้อความสตริง
อาร์เรย์ (Array).
อาร์เรย์ (Array).
การคำนวณทางคณิตศาสตร์ ตัวดำเนินการ
ตัวแปรกับชนิดของข้อมูล
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
ฟังก์ชันรับข้อมูล ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
แถวลำดับ (array) ง40202 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
ง30212 พื้นฐานการเขียนโปรแกรม ศูนย์คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ปฏิบัติการครั้งที่ 10 pointer. หน่วยความจำ หน่วยความจำนั้นเสมือนเป็นช่องว่างไว้เก็บ ของที่มีหมายเลขประจำติดไว้ที่แต่ละช่อง เพื่อใช้ในการระบุตำแหน่งของช่องได้
บทที่ 5 ฟังก์ชันกับอาร์เรย์ Function & Array
ตัวแปรกับชนิดของข้อมูล
Week 2 Variables.
Computer Programming for Engineers
ความหมาย การประกาศ และการใช้
โครงสร้างภาษาซี #include <stdio.h> void main() {
คำสั่งเกี่ยวกับการรับ และแสดงผล
โครงสร้างโปรแกรมภาษาซี
Output of C.
บทที่ 9 พอยเตอร์. สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อ การศึกษาเท่านั้น พอยเตอร์ (Pointer) พอยเตอร์คือต้นฉบับของชนิดข้อมูล เป็นชนิด ข้อมูลที่สร้างจากข้อมูลมาตรฐานชนิดหนึ่ง.
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
1. Global variable คือ ตัวแปรที่กำหนดหรือประกาศไว้นอกฟังก์ชันใด ๆ ทุกฟังก์ชัน สามารถนำตัวแปรประเภท Global ไปใช้ได้ทุกฟังก์ชัน.
การเขียนโปรแกรม (ภาษาซี)
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
บทที่ 11 พอยเตอร์ C Programming C-Programming. จันทร์ดารา Surin Campus : มีอะไรบ้างในบทนี้  ตัวแปรพอยเตอร์ (Pointer) เป็นตัว แปรที่แปลกและแตกต่างไปจากตัว.
ใบสำเนางานนำเสนอ:

ตัวแปรประเภทตัวชี้ (Pointer) http://www.renvi.src.ku.ac.th

Today Agenda pointer? การประกาศตัวแปรพอยท์เตอร์ 1 การประกาศตัวแปรพอยท์เตอร์ 2 การแสดงตำแหน่ง, ค่าของข้อมูลของตัวแปรที่พอยท์เตอร์ชี้อยู่ 3 ตัวแปรพอยท์เตอร์กับอาร์เรย์ 4 อาร์เรย์ของพอยท์เตอร์ 5 พอยท์เตอร์ของพอยท์เตอร์ 6

ตำแหน่งบนหน่วยความจำ Pointer ? เมื่อมีการประกาศตัวแปรใด ๆ ขึ้นในโปรแกรม คอมไพเลอร์ของ C จะจัดการจองพื้นที่ในหน่วยความจำ ณ ตำแหน่งที่ว่างเพื่อเป็นที่เก็บข้อมูลของตัวแปรนั้น ปกติผู้พัฒนาจะไม่ทราบว่าตำแหน่งที่เก็บข้อมูลนั้นอยู่ ณ ตำแหน่งใด หากต้องการทราบตำแหน่งของข้อมูลในหน่วยความจำ สามารถทำได้โดยการใช้ ตัวแปรประเภทตัวชี้ (Pointer) ตัวอย่าง: int counter = 100; char sex = ‘M’; float gpa = 3.21; ตัวแปร ตำแหน่งบนหน่วยความจำ ค่าของข้อมูล counter 1001 100 sex 1003 ‘M’ gpa 1004 3.21

การประกาศตัวแปรชนิด Pointer รูปแบบการใช้งาน ชนิดข้อมูล เป็น ชนิดของข้อมูลพอยท์เตอร์ ชื่อตัวแปร เป็น ชื่อของตัวแปรพอยท์เตอร์ เช่น int *pt_int;  ตัวแปรพอยเตอร์นี้จะชี้ไปยังชนิดข้อมูลที่__________ char *pt_char  ตัวแปรพอยท์เตอร์นี้จะชี้ไปยังชนิดข้อมูลที่ ________ float *pt_float  ตัวแปรพอยท์เตอร์นี้จะชี้ไปยังชนิดข้อมูลที่ ________ ชนิดข้อมูล *ชื่อตัวแปร;

การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ ประกาศตัวแปรสำหรับเก็บข้อมูฃ ประกาศตัวแปรพอยท์เตอร์ ____________________________________ ตัวแปร ตำแหน่งบนหน่วยความจำ ค่าของข้อมูล พอยท์เตอร์ counter 1001 100 pt_counter sex 1003 ‘M’ pt_sex gpa 1004 3.21 pt_gpa

การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ (ต่อ) ตัวแปร ตำแหน่งบนหน่วยความจำ ค่าของข้อมูล พอยท์เตอร์ counter 1001 100 pt_counter sex 1003 ‘M’ pt_sex gpa 1004 3.21 pt_gpa int counter = 100; int *pt_counter; char sex = ‘M’; char *pt_sex; float gpa = 3.21; float *pt_gpa;

การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ (ต่อ) int counter = 100; int *pt_counter; pt_counter = &counter; counter 100 1001 pt_counter 1003 _____

การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ (ต่อ) รูปแบบการใช้งาน ตัวแปรพอยท์เตอร์ เป็น ตัวแปรชนิดพอยท์เตอร์ที่สร้างไว้ ชื่อตัวแปรที่ต้องการทราบตำแหน่ง อย่าลืมว่า “ทั้งตัวแปรพอยท์เตอร์และตัวแปรที่ต้องการทราบตำแหน่งต้องเป็นประเภทข้อมูลชนิดเดียวกัน” และ เราใช้ %p เป็นรหัสที่ใช้ในการแสดงข้อมูลประเภทพอยท์เตอร์ ตัวแปรพอยท์เตอร์ = &ชื่อตัวแปรที่ต้องการทราบตำแหน่ง;

การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ (ต่อ) ตัวอย่างการใช้งาน int counter = 100; int *pt_counter; pt_counter = &counter; printf(“address of counter is: %p\n”, pt_counter); char sex = ‘M’; char *pt_sex; pt_sex = &sex printf(“address of sex is: %p\n”, pt_sex); float gpa = 3.21; float *pt_gpa; pt_gpa = &gpa; printf(“address of gpa is: %p”, pt_gpa);

การแสดงค่าของข้อมูลที่ตัวแปรพอยท์เตอร์ชี้ รูปแบบการใช้งาน ตัวอย่าง int x = 17, y; int *pt_int; pt_int = &x; y = *pt_num *ตัวแปรพอยท์เตอร์ x 17 0100 pt_int 0370 y 0876 ____ ___

การแสดงค่าของข้อมูลที่ตัวแปรพอยท์เตอร์ชี้ (ต่อ) #include "stdio.h" #include "conio.h" main() { int a = 2, b = 3; int *p = &a; printf("Pointer p is points to a at address: %p\n", p); printf("Value of a is %d and value of p is %d too\n\n", a, *p); p = &b; printf("Now pointer p is point to b at address %p\n", p); printf("Value of b is %d and now value of p is %d too\n", b, *p); getch(); }

ตัวแปรพอยท์เตอร์กับอาร์เรย์ เราสามารถใช้พอยท์เตอร์ชี้ไปยังข้อมูลในแต่ละช่องของอาร์เรย์ได้ โดยการกำหนดให้พอยท์เตอร์ชี้ไปยังตำแหน่งของช่องที่ต้องการอ้างถึง วิธีการระบุให้พอยท์เตอร์ชี้ไปยังช่องแรกของอาร์เรย์นั้น ทำได้โดยกำหนดชื่อของอาร์เรย์ให้กับตัวแปรพอยท์เตอร์โดยตรง ตัวอย่างการใช้งาน char a[4] = “com”; char *p; p = a; หรือ p = &a[0]; p 1001 a[0] a[1] a[2] a[3] c o m null 101 102 103 104 ____

ตัวแปรพอยท์เตอร์กับอาร์เรย์ (ต่อ) สามารถใช้การกระทำการทางคณิตศาสตร์ เช่น +, -, ++, -- เข้ามาจัดการกับการเลื่อนตัวแปรพอยท์เตอร์ในอาร์เรย์ ดังนั้นการเลื่อนพอยท์เตอร์ไป 1 ก็คือ เลื่อนตำแหน่งในหน่วยความจำไปเท่ากับขนาดของชนิดตัวแปรนั้น int เลื่อนตำแหน่งในหน่วยความจำไป 2 bytes float เลื่อนตำแหน่งในหน่วยความจำไป 4 bytes ยกตัวอย่างเช่น char a[4] = “com”; char *p; p = a; หรือ p = &a[0]; p = p+2; --p; p 1001 a[0] a[1] a[2] a[3] c o m null 101 102 103 104 102 101 103

ตัวแปรพอยท์เตอร์กับอาร์เรย์ (ต่อ) main() { char data[9] = "Computer"; char *p = data; printf("First element of data at address %p\n", &data[0]); printf("and value of first element is: %c\n\n", *p); ++p; printf("p point to address %p: value %c\n", p, *p); --p; p = p+5; getch(); }

อาร์เรย์ของพอยท์เตอร์ ก่อนหน้านี้เห็นได้ว่า พอยท์เตอร์ 1 ตัวสามารถอ้างอิงไปยังตัวแปรอื่น ๆ ได้ ณ เวลาใดเวลาหนึ่งเพียงตัวแปรเดียวเท่านั้น หากเราต้องการให้พอยท์เตอร์สามารถอ้างอิงไปยังตัวแปรหลาย ๆ ตัวพร้อมกันในเวลาเดียวกัน ทำได้โดยการนำตัวแปรพอยท์เตอร์มากำหนดให้อยู่ในรูปแบบของอาร์เรย์ เช่น int a = 1, b = 2; int *p[2]; p[0] = &a; p[1] = &b; P[0] P[1] 105 106 a 1 101 b 2 103 ___ ___

อาร์เรย์ของพอยท์เตอร์ (ต่อ) รูปแบบการใช้งาน เช่น int *p[3]; คือการประกาศตัวแปร p เป็นตัวแปรอาร์เรย์ของพอยท์เตอร์ชนิดจำนวนเต็ม ขนาด 3 ช่อง Char *p[10]; คือการประกาศตัวแปร p เป็นตัวแปรอาร์เรย์ของพอยท์เตอร์ชนิดตัวอักษร ขนาด 10 ช่อง ชนิดของข้อมูล *ชื่อตัวแปรพอยท์เตอร์[ขนาดของอาร์เรย์];

อาร์เรย์ของพอยท์เตอร์ (ต่อ) main(){ int a[5] = {1, 2, 3, 4, 5}; int *p_a[5]; int i; for(i=0; i<5; i++){ p_a[i] = &a[i]; printf("Address of a[%d]: %p\n", i, p_a[i]); printf("Value of a[%d]: %d\n\n", i, *p_a[i]); } getch();

พอยท์เตอร์ของพอยท์เตอร์ เป็นตัวแปรพอยท์เตอร์ตัวหนึ่งทึ่ทำหน้าที่ชี้ไปยังตัวแปรพอยท์เตอร์อีกตัวแทนที่จะชี้ไปยังตัวแปรอื่นโดยตรง char a = ‘A’; char *p1; char **p2; p1 = &a; p2 = &p1; char a = ‘A’; char *p1; p1 = &a; p1 300 a A 200 p1 400 p1 300 a A 200 ___ ___ ___

พอยท์เตอร์ของพอยท์เตอร์ (ต่อ) รูปแบบการใช้งาน เรียกอีกอย่างว่า indirect pointer หากต้องการทราบตำแหน่งของพอยท์เตอร์ของพอยท์เตอร์ของพอยท์เตอร์ ก็ต้องใช้ * จำนวน 3 ตัว เป็นเช่นนี้ไปเรื่อย ๆ ชนิดของข้อมูล **ชื่อตัวแปรพอยท์เตอร์;

พอยท์เตอร์ของพอยท์เตอร์ (ต่อ) main() { int a = 10; int *pt_a; int **pt_pt_a; pt_a = &a; pt_pt_a = &pt_a; printf("address of a is %p and value of a is %d\n", pt_a, *pt_a); printf("address of pt_a is %p and value of a is %d", pt_pt_a, **pt_pt_a); getch(); }

It’s Time to do your QUIZ :) http://www.renvi.src.ku.ac.th