ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Arrays and Pointers
2
Advanced C Arrays ชื่อตัวแปร intA ทำหน้าที่เป็น pointer ชี้ไปที่ตำแหน่งแรกของ array int intA[6]; intA[3] = 13; intA 13 memory
3
Advanced C Arrays intA + 3 หมายถึงตำแหน่งที่ 3 ถัดจากตำแหน่งที่ intA ชี้อยู่ นั่นคือ intA + 3 เป็น pointer ที่ชี้ไปยัง intA[3] intA intA + 3 13 memory
4
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
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)
6
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
7
Tips ฟังก์ชัน sizeof( ) เป็นฟังก์ชันบอกขนาดของตัวแปรหรือขนาดของชนิดข้อมูล เช่น int a, b; b = sizeof(a); printf(“%d”, sizeof(float));
8
Tips TYPE cast คือการเปลี่ยนชนิดข้อมูล โดยการเขียนชนิดข้อมูลไว้ในวงเล็บ เช่น (int), (float), (char) แล้ววางไว้หน้าตัวแปรหรือค่าข้อมูลที่ต้องการเปลี่ยน ตัวอย่างเช่น float f = 10.5; printf(“%d”, (int)f); printf(“%d”, (int)5.5);
9
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
10
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) );
11
Bad dynamic arrays example
นี่คือตัวอย่างการใช้งานที่ไม่ควรทำ int * intPtr; int x; intPtr = &x; intPtr[0] = 12; // ok intPtr[3] = 13; // bad เพราะอะไร???
12
Advantages of being in the heap
สามารถกำหนดขนาดของหน่วยความจำ(เช่น array) ได้ขณะรันโปรแกรม สามารถคืนเนื้อที่ในหน่วยความจำที่ได้มาโดยใช้ free() สามารถเปลี่ยนแปลงขนาดของ array ขณะรันโปรแกรมได้โดยใช้ realloc() เช่น b = realloc(b, sizeof(int)*100); ทำให้ใช้เนื้อที่ในหน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้น
13
Disadvantages of being in the heap
ต้องจองเนื้อที่ไว้ใช้เอง และต้องจองให้ถูกต้อง (ไม่มีใครมาเช็คให้) ต้องไม่ลืมที่จะคืนหน่วยความจำ และต้องทำเอง ถ้าลืมจอง-คืน หรือ ทำผิดขั้นตอน โปรแกรมอาจไม่แสดงข้อผิดพลาดขณะ compile และทำงานได้ตามปกติ แต่เมื่อเจอ input บางกรณีอาจทำให้โปรแกรมผิดพลาดและเสียหายได้ ... นั่นคือ ต้องใช้อย่างระมัดระวัง
14
โจทย์ 6 เขียนโปรแกรมแปลงเลขฐานสองเป็นฐานสิบหก โดย 6.1 ไม่มีทศนิยม
6.1 ไม่มีทศนิยม เช่น Input : Output : 8F 6.2 มีทศนิยม Input : Output : 8F.8
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.