ݺߣ

ݺߣShare a Scribd company logo
Week 4.
อาเรย์
(Array)
2
หัวข้อ
การประกาศตัวแปรอาเรย์
การเข้าถึงข้อมูลในอาเรย์
Multidimensional arrays (อาเรย์หลาย
การกำาหนดค่าเริ่มต้นให้กับอาเรย์ 2 มิติ
อาเรย์ของ characters string
การผ่านตัวแปร array ระหว่างฟังก์ชัน
3
Array
อาเรย์ คือ กลุ่มของตัวแปรชนิดเดียวกัน
มากกว่า 1 ตัวที่ใช้ชื่อเดียวกัน ซึ่งการเข้าถึง
สมาชิก (element) แต่ละตัวจะใช้ดรรชี
(index หรือ subscript) ที่เป็นเลขจำานวน
เต็มในการระบุ
Array ใช้ทำาอะไรได้บ้าง
เก็บชุดตัวอักษร หรือ (Characters
String)
เก็บชุดค่าตัวแปรได้ทุกชนิด เช่น int
salary[50]
4
การประกาศตัวแปรอาเรย์
ชื่อตัวแปร[จำานวนสมาชิก] [= { รายการค่าเ
ตัวแปรอาเรย์ต้องมีจำานวนสมาชิกเสมอ เรา
อาจจะกำาหนดให้ หรือ Compiler กำาหนด
ให้ก็ได้ เช่น
•int arr[5];
•char arr_c[3] = {‘a’, ‘b’,
‘c’};
•char arr_c[] = {‘a’, ‘b’, ‘c’};
•float arr_f[ ] = { 1.25, 3 ,
4.5, 6.5};
arr
[0]
arr
[4]
5
การกำาหนดค่าเริ่มต้น
ดค่าเริ่มต้น = { รายการข้อมูล }
ด้เฉพาะจุดที่ประกาศตัวแปรเท่านั้น
ตัวอย่างที่ผิด ตัวอย่างที่ถูก หรือ
ตัวอย่างที่ถูก
int arr[5]; int arr[5];
for(i=0; i <=4 ;i++)
arr = { 1, 2, 3, 4, 5 }; arr[0] = 1;
{
arr[1] = 2;
arr[i]=i+1;
6
การเข้าถึงข้อมูลในอาเรย์
• คือการใช้ข้อมูลตัวแปรอาเรย์นั้นๆ
• การเข้าถึงข้อมูลโดยผ่านตำาแหน่ง
สมาชิก(element)ของอาเรย์
• สามารถเข้าถึงได้โดยตรงโดยระบุดรรชนี
(index หรือ subscript)
• ดรรชนี เป็นเลขจำานวนเต็ม และเริ่มต้นที่
0 เสมอ (หรืออาจใช้ตัวแปรแทนก็ได้)
• เราจัดการสมาชิกแต่ละตัวได้อย่างอิสระเหมือน
กับตัวแปรทั่วๆไป เช่น
nt arr[5] = { 1, 2, 3, 4, 5 };
int i;
i = arr[0]; arr[1] = arr[2];
arr[0]++;
printf(“%d”, arr[0]); //แสดงค่าอะ
scanf(“%d”, &arr[1]);
7
การเข้าถึงข้อมูลในอาเรย์(ต่อ)
ดรรชนี ของอาเรย์
• เป็นเลขจำานวนเต็ม ที่เริ่มต้นที่ 0
เช่น arr[0], arr[5]
• ใช้นิพจน์ที่เป็น integer ตัวอย่าง
int i = 3, arr_i[i] = { 1,2,3 };
/* การประกาศตัวแปร */
float arr_f[i]; /* การ
ประกาศตัวแปร */
arr_f[i-3] = 5.5;
arr_f[arr_i[2]] = 3.14;
for (i=1; i < 3;i++)
8
ลักษณะการใช้นคจ.
ของตัวแปรอาเรย์
กาศตัวแปร
arr_i[4] = { 1, 2, 3, 4};
9
การเข้าถึงข้อมูลแบบทางตรงและทางอ้อม
ถึงโดยทางตรง โดยใช้ ดรรชนี
เลขจำานวนเต็ม ที่เริ่มต้นที่ 0 เช่น arr[0], arr[5]
นิพจน์ที่เป็น integer เช่น arr[i]
ถึงโดยทางอ้อม
การเข้าถึงแบบพอยน์เตอร์
int arr_i[4] = { 1, 2, 3, 4}; //
ประกาศตัวแปร
printf(“%d”, arr_i[0]); //ตัวแรก ทาง
ตรง
printf(“%d”, *arr_i ); /*หรือ
*(arr_i+0) */ //ตัวแรก ทางอ้อม
printf(“%d”, arr_i[1]); //ตัวที่สอง
โดย ทางตรง
printf(“%d”, *(arr_i+1) ); //ตัวที่สอง
10
แบบฝึกหัด
ให้ทำาการประกาศตัวแปรเพื่อเก็บคะแนน
นักศึกษาจำานวน 10 คน แล้วทำาการรอ
รับคะแนนนักศึกษาทุกคนจากผู้ใช้ และ
หาค่าเฉลี่ยของนักศึกษาทั้ง 10 คนนั้น
11
Multidimensional arrays
(อาเรย์หลายมิติ) ที่ผ่านมา
 Array หนึ่งมิติ (one-dimensional
arrays)
 คือ ใช้ดรรชนี (index หรือ
subscript) เพียงตัวเดียว
 อาเรย์หลายมิติ
(Multidimensional arrays)
 ใช้ดรรชนีหลายตัว
 หากใช้ดรรชนี 2 ตัว จะเรียกว่า อา
เรย์ 2 มิติ
 หากใช้ดรรชนี 3 ตัว จะเรียกว่า อา
เรย์ 3 มิติ
หนึ่งมิติ
สองมิติ
สามมิติ
12
อาเรย์หนึ่งมิติ
arr[0], arr[1]
อาเรย์สองมิติ
ชนิด ชื่อ[แถว][คอลัมน์]
int TwoArray[2][3];
float MyArr[3][4];
//เป็นอย่างไร
การเข้าถึงข้อมูล
[0][0][0][1][0][2]
[1][0][1][1][1][2]
13
การกำาหนดค่า
for(i=0;i<3;i
++){
for
(j=0;j<4;j++)
{
MyArr[i]
0 0 0
0 0 0
0
0
0 0 0 0
arri[3][4] = { {2, 5, 12, 3},
{1,4,11,9},
{6,7,10,8} };
2 5 12
1 4 11
3
9
6 7 10 8
ห้ค่า ณ. ที่ประกาศตัวแปร
โดยใช้การวนรอบ
14
ให้เติมค่าข้อมูล
int TestArr[4][2];
for(i=0;i<4;i++){
for (j=0;j<2;j++){
TestArr[i][j] = i+j;
}
}
TestArr[4][2]
15
การใช้พื้นที่ Memory
 ใช้การจัดเรียงไปที
ละแถว
 เช่น int
TestArr[3][2]
TestArr[0][0]
TestArr[0][1]
TestArr[1][0]
TestArr[1][1]
Memory (1 ช่อง 1 ไบต์)
TestArr[2][0]
TestArr[2][1]
16
แบบฝึกหัด
จงประกาศตัวแปรอาเรย์เพื่อเก็บข้อมูลต่อไปนี้ (ประกาศ
ตัวแปรพร้อมกับกำาหนดค่าเริ่มต้น) พร้อมแสดงผลลัพธ์ข้อมูล
ทุกรายการตามลำาดับ
ชื่อ คะแนน
JOHN 20.5
MICHEAL31
DAVID 28
JEFF 36.7
HERBERT 26
17
อาเรย์ของ characters string
 ต้องการเก็บ characters string ลงในตัวแป
รอาเรย์ เช่นข้อมูล
George
Michelle
Joe
Marcus
Stephanie
 เราอาจจะสร้างอาเรย์สองมิติ เพื่อเก็บข้อมูล
character เช่น
char NameArr[ 5] [15] = {
{“George”},
{“Michelle”},
{“Joe”},
{“Marcus”},
{“Stephanie”} };ameArr จะใช้พื้นที่เท่าไร?
18
การเก็บข้อมูล
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 G e o r g e 0
1 M i c h e l l e 0
2 J o e 0
3 M a r c u s 0
4 S t e p h a n I e 0
นที่ ที่ไม่ได้ใช้งาน =>สิ้นเปลืองหน่วยความจำา
งมีวิธีการที่ดีกว่านี้แน่ๆ
ซี จะมี ตัวแปรพอยน์เตอร์ที่สามารถ character stri
ยัดเนื้อที่มากกว่า
19
 เป็นอาเรย์มิติเดียวที่เก็บพอยน์เตอร์ที่ชี้ไปที่ข้อมูล
charcter
 นั่นก็คือ การสร้าง อาเรย์ของพอยน์เตอร์นั่นเอง
 ซึ่งจากตัวอย่างที่ผ่านมาประกาศตัวแปรอาเรย์ใหม่
เป็น
char * names[ 5] = { “George”,
“Michelle”,
“Joe”,
“Marcus”,
“Stephanie” };
ใช้พื้นที่เท่าไร?
อาเรย์ของพอยน์เตอร์ที่ใช้เก็บตัว
อักษร
20
การใช้พื้นที่ใน Memory
name
s[0]
name
s[1]
name
s[2]
name
s[3]
name
s[4]
21
จงแสดงค่าผลลัพธ์
names หมายถึงค่า
__________
names[0] หมายถึงค่า
__________
*names หมายถึงค่า
__________
names[1] หมายถึงค่า __________
names+1 หมายถึงค่า __________
*(names+1) หมายถึงค่า
__________
22
แบบฝึกหัด
char * names[ 5] = { “George”,
“Michelle”,
“Joe”,
“Marcus”,
“Stephanie” };
จากการประกาศตัวแปรข้างต้น จง
แสดงข้อมูล character string ที่เก็บ
ใน array ทั้งแบบทางตรงและทาง
อ้อม
23

More Related Content

อาเรย์ (Array)