Arrays and Pointers.

Slides:



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

Arrays.
พอยน์เตอร์ (Pointer) Chapter Introduction to Programming
Array.
Arrays.
Arrays.
กระบวนการจัดทำแผนพัฒนาชุมชน ไปสู่การปฏิบัติ
ปัจจัย และ พฤติกรรมบริโภคเครื่องดื่มแอลกอฮอล์
โรงพยาบาลพระอาจารย์แบน ธนกาโร อำเภอภูพาน จังหวัดสกลนคร ปี 2560
หลักสูตรการศึกษานอกระบบ ระดับการศึกษาขั้นพื้นฐาน พุทธศักราช 2551
การขัดกันระหว่างประโยชน์ส่วนบุคคล และประโยชน์ส่วนรวม
Multiple Input Multiple Output (MIMO)
Statistical Method for Computer Science
ความก้าวหน้าของเจ้าพนักงานทันตสาธารณสุข
โครงการส่งเสริมการพัฒนาคุณภาพงาน คณะวิทยาศาสตร์ มหาวิทยาลัยเชียงใหม่
ราชาธิราช ตอน สมิงพระรามอาสา จัดทำโดย คุณครูฮาดีหม๊ะ แวดะสง.
Statistical Method for Computer Science
การสอบเทียบเครื่องมือวัด
ทะเบียนราษฎร.
สำนักงานคณะกรรมการการศึกษาขั้นพื้นฐาน
กฎกระทรวง ฉบับที่ 4 (พ. ศ. 2535) ออกตามความในพระราชบัญญัติโรงงาน พ. ศ
ประกาศกระทรวงเกษตรและสหกรณ์ เรื่อง การแจ้งและการรับแจ้งข้อเท็จจิรงเกี่ยวกับวัตถุอันตรายชนิดที่ 1 ที่กรมปศุสัตว์รับผิดชอบ พ.ศ ประกาศในราชกิจจานุเบกษา.
ไตรภูมิพระร่วง ตอน มนุสสภูมิ
โคลงโลกนิติ.
การเบิกจ่ายเงินเกี่ยวกับค่าใช้จ่าย ในการบริหารงานของส่วนราชการ
การแก้ไขปัญหา สหกรณ์เครดิตยูเนี่ยนคลองจั่น จำกัด
แนวทางการใช้จ่ายเงินกองทุนหลักประกันสุขภาพแห่งชาติ
การนำเสนอสหกิจศึกษา ณ อบจ.ยะลา
ครู รอง ผอ.สถ. ผอ.สถ. ศน. ครูผู้ช่วย ครู ชชพ. ผอ.ชชพ. ศน.ชชพ. ครู ชช.
กฎหมายเกี่ยวกับ การเงินการคลัง
พระราชบัญญัติข้อมูลข่าวสารของราชการ พ.ศ. 2540
ค่าใช้จ่ายต่างๆ ในโครงการฯ
พระราชบัญญัติ การศึกษาแห่งชาติ พ.ศ.2542
การคุ้มครองผู้บริโภค
ประกาศกระทรวงแรงงานเรื่อง อัตราเงินสมทบ อัตราเงินฝาก วิธีการประเมินและการเรียกเก็บเงินสมทบ วันที่ประกาศในราชกิจจานุเบกษา
ดร.แสนคำ นุเสน 18 ชั่วโมงบรรยาย คะแนนเก็บ 20 % คะแนนสอบ 20%
สถิติ สำหรับการประเมินผลการทดสอบความชำนาญ
การดำเนินงานด้านธุรกิจเสริม
บทที่ 3 หลักการทั่วไปเกี่ยวกับ การเงินการคลังท้องถิ่น
Big- & Big- Big-O ที่ใช้อธิบายการเติบโตของฟังก์ชัน แต่จะมีข้อจำกัด โดยเฉพาะ เมื่อ f(x) มี O(g(x)) ก็จะมีเฉพาะขอบเขตบน(Upper bound)คือ g(x) เมื่อ f(x)
นำเสนอ วัดเกาะชัน ด.ช.ปกรณ์ ร้อยจันทร์ ม.2/7 เลขที่ 19
สาระสำคัญพ.ร.บ.การทวงถามหนี้ พ.ศ.๒๕๕๘ สาระสำคัญพ.ร.บ.การทวงถามหนี้ พ.ศ.๒๕๕๘.
หลักกรรม หลักกรรมเป็นหลักธรรมคำสอนที่สำคัญประการหนึ่งของ พระพุทธศาสนา พระพุทธเจ้าทรงสอนและเน้นเรื่องกรรมดัง พระบาลีที่ว่า กลฺยาณการี กลฺยาณํ ปาปการี จ.
บทที่4 ฟังก์ชันตรีโกณมิติ
ในปีการศึกษา ในปีการศึกษา 2560.
แบบทดสอบ เรื่อง ความน่าจะเป็น.
การอบรมเชิงปฏิบัติการ พัฒนาศักยภาพครูแกนนำ

กองการเจ้าหน้าที่ สำนักปลัดกรุงเทพมหานคร
ช่วงที่ 2 การติดตามเร่งรัด การเบิกจ่ายงบประมาณ.
การตรวจคำคู่ความ.
Probability and Statistics for Computing
การกำหนดที่ตั้งเป้าหมาย
Governance Excellence
กฎหมายในโลกสมัยใหม่และ ความเคลื่อนไหวของสังคมที่เป็นพลวัตร
สื่อใหม่ในโลกดิจิตัล
แนวทางการปฏิบัติงานป้องกัน แก้ไขปัญหาการใช้สารเร่งเนื้อแดง
แนวทางการจัดวางระบบการควบคุมภายใน
หลักระบบสารสนเทศ Principles of information systems
วิเคราะห์ผลการดำเนินงาน Planfin เดือน มกราคม 2561 เปรียบเทียบ HGR และโรงพยาบาลขนาดเดียวกัน
ขายทอดตลาด Faculty of Law.
การพัฒนากฎหมาย ที่อยู่ในความรับผิดชอบของกรมอนามัย
Good morning welcome to Calvary Chapel at the Bridge สวัสดีตอนเช้าขอต้อนรับสู่ โบสถ์แคล'วะรีแชพ'เพิลที่สะพาน.
Good morning welcome to Calvary Chapel at the Bridge สวัสดีตอนเช้าขอต้อนรับสู่ โบสถ์แคล'วะรีแชพ'เพิลที่สะพาน ที่สะพาน.
วาระที่ 5.1 ความก้าวหน้าประกาศกระทรวงสาธารณสุข ตามมาตรา 44
สรุปการเบิกจ่ายงบประมาณยาเสพติดจังหวัดชลบุรี ปีงบประมาณ 2557
การสร้างความเชื่อมั่นในตนเอง
จังหวัดมีศูนย์ปฏิบัติการ (EOC) และทีมตระหนักรู้ Success
บริษัท จำกัด Logo company
Good morning welcome to Calvary Chapel at the Bridge สวัสดีตอนเช้าขอต้อนรับสู่ โบสถ์แคล'วะรีแชพ'เพิลที่สะพาน.
ใบสำเนางานนำเสนอ:

Arrays and Pointers

Advanced C Arrays ชื่อตัวแปร intA ทำหน้าที่เป็น pointer ชี้ไปที่ตำแหน่งแรกของ array int intA[6]; intA[3] = 13; intA 13 memory 0 1 2 3 4 5

Advanced C Arrays intA + 3 หมายถึงตำแหน่งที่ 3 ถัดจากตำแหน่งที่ intA ชี้อยู่ นั่นคือ intA + 3 เป็น pointer ที่ชี้ไปยัง intA[3] intA intA + 3 13 memory 0 1 2 3 4 5

Advanced C Arrays intA intA + 3 13 ข้อสังเกต : - intA หรือ intA+3 เป็น pointer(เก็บตำแหน่ง) แต่ intA[3] เป็น integer - intA+3 มีค่าเท่ากับ &intA[3] และ intA[3] เท่ากับ *(intA+3) intA intA + 3 13 memory 0 1 2 3 4 5

Example int intA[6], i; for(i=0;i<6;i++) { intA[i] = i*2; } [0] [1] [2] [3] [4] [5] int intA[6], i; for(i=0;i<6;i++) { intA[i] = i*2; } { printf(“%d ”, *(intA+i) ); 2 4 6 8 10 intA รอบที่ i = 0 *(intA+0) รอบที่ i = 1 *(intA+1) รอบที่ i = 2 *(intA+2) รอบที่ i = 3 *(intA+3) รอบที่ i = 4 *(intA+4) รอบที่ i = 5 *(intA+5)

p = p+12 จะหมายถึงเพิ่มค่า p ขึ้นอีก 24 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

Tips ฟังก์ชัน sizeof( ) เป็นฟังก์ชันบอกขนาดของตัวแปรหรือขนาดของชนิดข้อมูล เช่น int a, b; b = sizeof(a); printf(“%d”, sizeof(float));

Tips TYPE cast คือการเปลี่ยนชนิดข้อมูล โดยการเขียนชนิดข้อมูลไว้ในวงเล็บ เช่น (int), (float), (char) แล้ววางไว้หน้าตัวแปรหรือค่าข้อมูลที่ต้องการเปลี่ยน ตัวอย่างเช่น float f = 10.5; printf(“%d”, (int)f); printf(“%d”, (int)5.5);

Dynamic arrays เราสามารถจองเนื้อที่ในหน่วยความจำ (heap memory) โดยใช้ฟังก์ชัน malloc() (อยู่ใน header file ที่ชื่อว่า stdlib.h) malloc( size of memory in bytes); เช่น malloc(12); จองเนื้อที่ในหน่วยความจำขนาด 12 bytes malloc(sizeof(float)); จองเนื้อที่ในหน่วยความจำขนาดเท่ากับ 4 bytes malloc(sizeof(int)*3); จองเนื้อที่ในหน่วยความจำขนาดเท่ากับ ขนาดของ integer * 3 = 2 * 3 bytes = 6 bytes

Dynamic arrays int *a, i; a = (int *)malloc( sizeof(int) * 10 ); assert (a != NULL); for(i=0; i < 10 ; i++) a[i] = i+5; printf(“%d ”, a[i]); free(a); อาจเขียนได้อีกแบบ ดังนี้ for(i=0; i < 10 ; i++) *(a+i) = i+5; printf(“%d ”, *(a+i) );

Bad dynamic arrays example นี่คือตัวอย่างการใช้งานที่ไม่ควรทำ int * intPtr; int x; intPtr = &x; intPtr[0] = 12; // ok intPtr[3] = 13; // bad เพราะอะไร???

Advantages of being in the heap สามารถกำหนดขนาดของหน่วยความจำ(เช่น array) ได้ขณะรันโปรแกรม สามารถคืนเนื้อที่ในหน่วยความจำที่ได้มาโดยใช้ free() สามารถเปลี่ยนแปลงขนาดของ array ขณะรันโปรแกรมได้โดยใช้ realloc() เช่น b = realloc(b, sizeof(int)*100); ทำให้ใช้เนื้อที่ในหน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้น

Disadvantages of being in the heap ต้องจองเนื้อที่ไว้ใช้เอง และต้องจองให้ถูกต้อง (ไม่มีใครมาเช็คให้) ต้องไม่ลืมที่จะคืนหน่วยความจำ และต้องทำเอง ถ้าลืมจอง-คืน หรือ ทำผิดขั้นตอน โปรแกรมอาจไม่แสดงข้อผิดพลาดขณะ compile และทำงานได้ตามปกติ แต่เมื่อเจอ input บางกรณีอาจทำให้โปรแกรมผิดพลาดและเสียหายได้ ... นั่นคือ ต้องใช้อย่างระมัดระวัง

โจทย์ 6 เขียนโปรแกรมแปลงเลขฐานสองเป็นฐานสิบหก โดย 6.1 ไม่มีทศนิยม 6.1 ไม่มีทศนิยม เช่น Input : 10001111 Output : 8F 6.2 มีทศนิยม Input : 10001111.100 Output : 8F.8