Pointers. Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้

Slides:



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

Arrays.
ครั้งที่ 9 Function(ต่อ).
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
ตัวแปรประเภทตัวชี้ (Pointer)
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ตัวแปรชุด การเขียนโปรแกรมภาษาคอมพิวเตอร์ 1
การเขียนโปรแกรมด้วยคำสั่งเบื้องต้น
ข้อมูลชนิดอาร์เรย์ Array (บทที่ 5)
ประเภทของข้อมูลและตัวดำเนินการ Data Types and Operator (บทที่ 3)
Department of Computer Business
พอยน์เตอร์ (Pointer) Chapter Introduction to Programming
ข้อมูลชนิดโครงสร้าง (Structure Data)
บทที่ 11 การเขียนโปรแกรมโดยใช้ข้อมูลชนิดพอยท์เตอร์
Chapter 7 ขอบเขตของตัวแปร Variable Scope.
Data Type part.III.
หลักการโปรแกรม 1 Lecture 3: ตัวแปร, นิพจน์คณิตศาสตร์, การคำนวณทางคณิตศาสตร์,การดำเนินการกับสายอักขระ.
ทบทวน อาร์เรย์ (Array)
Structure Programming
Array.
ชนิดของข้อมูลและตัวดำเนินการ
Arrays and Pointers.
Structure.
Week 6 ประกาศค่าตัวแปร.
รับและแสดงผลข้อมูล.
PHP LANGUAGE.
ตัวชี้ P O I N T E R Created By Tasanawan Soonklang
อาเรย์ (Array).
ตัวแปรชุด.
Lecture no. 6 Structure & Union
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
หน่วยที่ 5 ตัวดำเนินการ (Operators)
Arrays.
Arrays.
C Programming Lecture no. 9 Structure.
C Programming Lecture no. 6: Function.
การจัดการข้อมูลด้วยคอมพิวเตอร์
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
ข้อมูลชนิดอาร์เรย์ ประเภทของข้อมูลที่ผ่านมาส่วนใหญ่ในตอนต้นๆจะเป็นข้อมูลเดี่ยว โดยตัวแปรหนึ่งตัวสามารถเก็บข้อมูลได้หนึ่งตัว ถ้าหากต้องการเก็บข้อมูลหลายตัวจะต้องประกาศตัวแปรหลายตัว.
ข้อมูลพื้นฐานและตัวดำเนินการ
อาร์เรย์และข้อความสตริง
อาร์เรย์ (Array).
อาร์เรย์ (Array).
การคำนวณทางคณิตศาสตร์ ตัวดำเนินการ
ตัวแปร (Variable) คือ ชื่อที่ตั้งขึ้นเพื่อเก็บข้อมูลในหน่วยความจำ สามารถเก็บข้อมูลชนิดใดก็ ได้ ลักษณะที่สำคัญ ค่าที่จัดเก็บ เมื่อปิดโปรแกรมข้อมูลจะหายไป.
ตัวแปรกับชนิดของข้อมูล
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
แถวลำดับ (array) ง40202 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
ง30212 พื้นฐานการเขียนโปรแกรม ศูนย์คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ปฏิบัติการครั้งที่ 10 pointer. หน่วยความจำ หน่วยความจำนั้นเสมือนเป็นช่องว่างไว้เก็บ ของที่มีหมายเลขประจำติดไว้ที่แต่ละช่อง เพื่อใช้ในการระบุตำแหน่งของช่องได้
โปรแกรมยูทิลิตี้.
ตัวแปรกับชนิดของข้อมูล
Week 12 Engineering Problem 2
การประมวลผลสายอักขระ
Week 12 Engineering Problem 2
Computer Programming for Engineers
ความหมาย การประกาศ และการใช้
Overview of C Programming
คำสั่งเกี่ยวกับการรับ และแสดงผล
Output of C.
บทที่ 9 พอยเตอร์. สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อ การศึกษาเท่านั้น พอยเตอร์ (Pointer) พอยเตอร์คือต้นฉบับของชนิดข้อมูล เป็นชนิด ข้อมูลที่สร้างจากข้อมูลมาตรฐานชนิดหนึ่ง.
1. Global variable คือ ตัวแปรที่กำหนดหรือประกาศไว้นอกฟังก์ชันใด ๆ ทุกฟังก์ชัน สามารถนำตัวแปรประเภท Global ไปใช้ได้ทุกฟังก์ชัน.
บทที่ 2 โครงสร้างของภาษา C.
การกระทำทางคณิตศาสตร์
ตัวแปร และชนิดข้อมูล.
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
บทที่ 11 พอยเตอร์ C Programming C-Programming. จันทร์ดารา Surin Campus : มีอะไรบ้างในบทนี้  ตัวแปรพอยเตอร์ (Pointer) เป็นตัว แปรที่แปลกและแตกต่างไปจากตัว.
หลักการทั่วไปเกี่ยวกับการเขียนโปรแกรม
ใบสำเนางานนำเสนอ:

Pointers

Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้ เช่น linked list หรือ binary tree / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้ เช่น linked list หรือ binary tree

What is a pointer? / ชนิดข้อมูลประเภท int เปรียบเสมือนกับ กล่องที่เก็บค่า “ เลขจำนวนเต็ม ” 1 ค่า เช่น int num = 42; / ชนิดข้อมูลประเภท int เปรียบเสมือนกับ กล่องที่เก็บค่า “ เลขจำนวนเต็ม ” 1 ค่า เช่น int num = 42; 42 num จะจองเนื้อที่ใน หน่วยความจำไว้สำหรับ เก็บข้อมูลจำนวนเต็ม 1 ค่า โดยสามารถอ้างถึง ตำแหน่งที่เก็บนี้ด้วยชื่อ num

What is a pointer? / pointer มีความแตกต่างเล็กน้อย... / pointer จะไม่ได้เก็บค่าข้อมูล โดยตรง แต่จะเก็บตำแหน่ง (reference) ของตัวแปรที่เก็บ ข้อมูลนั้นแทน / เราอาจเรียกตัวแปรที่ถูก pointer เก็บตำแหน่งไว้ว่า “Pointee” / pointer มีความแตกต่างเล็กน้อย... / pointer จะไม่ได้เก็บค่าข้อมูล โดยตรง แต่จะเก็บตำแหน่ง (reference) ของตัวแปรที่เก็บ ข้อมูลนั้นแทน / เราอาจเรียกตัวแปรที่ถูก pointer เก็บตำแหน่งไว้ว่า “Pointee” 42 num ptr 1001

What is a pointer? 42 num ptr 1001 อาจวาดได้อีกอย่าง 42 num ptr ตัวแปร Pointer Pointee

Pointer assignment 42 num ptr ptr2 เราสามารถกำหนดให้ pointer ชี้ไปยัง ตำแหน่งเดียวกันได้ โดยใช้ เครื่องหมาย assignment ( เครื่องหมายเท่ากับ =) เช่น ptr2 = ptr;

Sharing 42 ptr ptr2 Sharing อ้างถึงเนื้อที่ใน หน่วยความจำเดียวกัน ( ประยุกต์ใช้ตอนส่งค่า ระหว่างฟังก์ชันหรือ โปรแกรมได้ )

Syntax int *point to int float *point to float char *point to char / int *ptr; กำหนดให้ ptr เป็น pointer ที่ชี้ไปยังตัว แปรประเภท integer int *point to int float *point to float char *point to char / int *ptr; กำหนดให้ ptr เป็น pointer ที่ชี้ไปยังตัว แปรประเภท integer

The star * / ตาม syntax อนุญาตให้เครื่องหมาย asterisk หรือ star ถูกวางไว้ที่ตำแหน่งใด ก็ได้ระหว่างชนิดของตัวแปร (base type) และ ชื่อตัวแปร (variable name) int *ptr; / ตาม syntax อนุญาตให้เครื่องหมาย asterisk หรือ star ถูกวางไว้ที่ตำแหน่งใด ก็ได้ระหว่างชนิดของตัวแปร (base type) และ ชื่อตัวแปร (variable name) int *ptr; เหมือนกัน

& operator ใช้ & วางไว้หน้าชื่อตัวแปร จะหมายถึงตำแหน่ง ของตัวแปรนั้น int num; int * numPtr; numPtr num num = 42; 42 numPtr = #

* operator / * operator เมื่อวางไว้หน้าตัวแปร pointer แล้ว จะหมายถึง ข้อมูลในตำแหน่งที่ pointer นั้นชี้อยู่ ( ข้อมูลใน pointee) / สมมติให้มีการประกาศตัวแปรดังนี้ int num, *numPtr; / * operator เมื่อวางไว้หน้าตัวแปร pointer แล้ว จะหมายถึง ข้อมูลในตำแหน่งที่ pointer นั้นชี้อยู่ ( ข้อมูลใน pointee) / สมมติให้มีการประกาศตัวแปรดังนี้ int num, *numPtr; 50 ผลลัพธ์ numPtr num 42 num = 42; * numPtr = 50; numPtr = # printf(“%d %d”, * numPtr, num); 50

Example int A, B, C, *P, *Q; A = 1; B = 2; C = 3; int A, B, C, *P, *Q; A = 1; B = 2; C = 3; P = &A; Q = &B; C = *P; P = Q; *P = 13; A B C P Q 1 13

พิจารณาตัวอย่าง pointer1.cpp

int a,b,c, *p, *q; a = 1; b = 2; c = 3; p = &a; printf("p = %p\n",p); printf("*p = %d\n",*p); q = &b; printf("q = %p\n",q); printf("*q = %d\n",*q); c = *p; printf("c = %d\n",c); p = q; printf("*p = %d\n",*p); printf("*q = %d\n",*q); printf("p = %p\n",p); printf("q = %p\n",q); *p = 13; printf("*p = %d\n",*p); printf("*q = %d\n",*q); pointer1.cpp

Bad Pointer Example เช่น int * p; *p = 42; เช่น int * p; *p = 42; จะเห็นว่า pointer p ยังไม่ถูก assign ให้ ชี้ไปที่ตำแหน่งใด แต่มีการกำหนดค่า *p = 42; ซึ่งไม่ถูกต้อง

Pointer Type Effects int *p; p = p + 12; จากตัวอย่างข้างบน p = p+12 ไม่ได้เป็นการบวก 12 กับ ค่าที่อยู่ใน p แต่... p = p+12 จะเพิ่มค่า p ขึ้นเท่ากับขนาดของ integer 12 ตัว ( มาจากการประกาศให้ p เป็น pointer ที่ชี้ไปยัง int ) ดังนั้น ถ้า integer 1 ตัว = 2 bytes จะได้ว่า p = p+12 จะหมายถึงเพิ่มค่า p ขึ้นอีก 24 int *p; p = p + 12; จากตัวอย่างข้างบน p = p+12 ไม่ได้เป็นการบวก 12 กับ ค่าที่อยู่ใน p แต่... p = p+12 จะเพิ่มค่า p ขึ้นเท่ากับขนาดของ integer 12 ตัว ( มาจากการประกาศให้ p เป็น pointer ที่ชี้ไปยัง int ) ดังนั้น ถ้า integer 1 ตัว = 2 bytes จะได้ว่า p = p+12 จะหมายถึงเพิ่มค่า p ขึ้นอีก 24

Pointer Type Effects int *p; p = p + 2; ถ้า int มีขนาด 2 bytes ดังนั้น เพิ่มค่าใน p ขึ้นอีก 4 int *p; p = p + 2; ถ้า int มีขนาด 2 bytes ดังนั้น เพิ่มค่าใน p ขึ้นอีก 4 char *c; c = c + 2; ถ้า char มีขนาด 1 byte ดังนั้น เพิ่มค่าใน c ขึ้นอีก 2 char *c; c = c + 2; ถ้า char มีขนาด 1 byte ดังนั้น เพิ่มค่าใน c ขึ้นอีก 2 float *f; f = f + 2; ถ้า float มีขนาด 4 bytes ดังนั้น เพิ่มค่าใน f ขึ้นอีก 8 float *f; f = f + 2; ถ้า float มีขนาด 4 bytes ดังนั้น เพิ่มค่าใน f ขึ้นอีก 8