Array
การกำหนดค่าเริ่มต้น(initialize) Array
กำหนดค่าแบบไม่กำหนดขนาด
int v1[] = { 1,2,3,4 };
char v2[] = { 'a','b','c',66};
กำหนดค่าแบบกำหนดขนาด
char v3[3] = { 'a','b',0 };
ถ้ากำหนดขนาดใหญ่กว่าจำนวนค่าที่รับ array ที่เหลือจะมีค่าเป็น 0
int v4[8] = { 1,2,3,4 };
มีค่าเท่ากับ
int v4[] = {1,2,3,4,0,0,0,0};
String
คือ char ที่อยู่ในเครื่องหมาย ” ” string จะปิดท้ายด้วย null (\0) ดังนั้น size จะมีมากกว่าที่เห็น 1 ตัวอักษรเช่น sizeof(“test”) == 5
initialize string โดยใช้ char
void initString()
{
char p[] = "Hello"; //string as char array
cout << p << "\n";
p[0] = 'Y'; //change p[0] to 'Y' is no problem
cout << p << "\n";
const char* ps = "This is string"; //must be constant
cout << ps << "\n";
}
แสดงผล
Hello
Yello
This is string
Raw character string
การเพิ่มตัวอักษรพิเศษเข้าไปใน string (อย่างเช่น backslash (\), quote (")) สามารถเขียนได้ดังนี้
void RawChar()
{
string s = "\\w + \\\\\\w+"; //normal expression
string s1 = R"(\w + \\\w+)"; //use R"()"
string s2 = R"("Write quoted")";//use R"()"
string s3 = R"(11
22
333)"; //use R"()"
cout << s << "\n";
cout << s1 << "\n";
cout << s2 << "\n";
cout << s3 << "\n";
}
แสดงผล
\w + \\\w+
\w + \\\w+
"Write quoted"
11
22
333
Pointer into Array
pointer มีความสัมพันธ์กับ Array เราสามารถใช้ pointer เป็นตัวกำหนดค่าเริ่มต้นให้กับ Array ได้
void InitString()
{
char v[] = "MyString";
char* p1 = v; //char[] to char*
char* p2 = &v[0]; //pointer to initial element
char* p3 = v + 4; //pointer to element from index 4 is 'r' onward
cout << "v[]: " << v << "\n";
cout << "p1 : " << p1 << "\n";
cout << "p2 : " << p2 << "\n";
cout << "p3 : " << p3 << "\n";
cout << "strlen(p1) = " << strlen(p1) << "\n";
cout << "strlen(v) = " << strlen(v) << "\n";
}
แสดงผล
v[]: MyString
p1 : MyString
p2 : MyString
p3 : ring
strlen(p1) = 8
strlen(v) = 8
การส่งค่า Array ไปยังฟังก์ชั่นมักจะมีปัญหาในกรณีที่ฟังก์ชั่นรับค่า array ที่มีขนาดคงที่แต่ในการส่งค่า array มีขนาดน้อยกว่า เช่น
void RecieveArr(int ar[10])
{
for (int i = 0; i < 10; ++i)
ar[i] = i;
}
int main()
{
///
/// send array
///
///
int a1[10];
int a2[5];
int a3[100];
RecieveArr(a1);
RecieveArr(a2); //Error
RecieveArr(a3); //รับค่าเพียง 10 ตัว
}
ดังนั้นเพื่อป้องกันการ error จากการส่งค่า array ที่มีขนาดน้อยกว่าเราสามารถใช้ pointer แทนได้ดังนี้
void RecieveArr(int* ar,int dim)
{
for (int i = 0; i < dim; ++i)
{
ar[i] = i;
cout << ar[i] << ",";
;
}
cout << "\n";
}
int main()
{
///
/// send array
///
///
int a1[10];
int a2[5];
int a3[100];
RecieveArr(a1, sizeof(a1) / sizeof(int)); //ส่งค่า a1 และขนาด
RecieveArr(a2, sizeof(a2) / sizeof(int));
RecieveArr(a3, sizeof(a3) / sizeof(int));
}
แสดงผล
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
