Programming

( บทความนี้เขียนเมื่อหลายเดือนที่แล้ว แต่เพิ่งจะเอามา Publish เนื้อหาอาจจะย้อนหลังไปบ้างนะครับ)
 
คำเตือน : บทความนี้ค่อนข้าง Hardcore กรุณาอย่าต่อยคนเขียน T T
 
สวัสดีครับ . . หลังจากที่ไม่ได้เขียน Blog มาซะนาน
ช่วงนี้ก็เป็นช่วงปิดเทอมของเหล่านักเรียน นักศึกษา รวมถึงตัวผมด้วย
ปิดเทอมนี้เพื่อนๆผมหลายคนได้แยกย้ายกันออกไปฝึกงาน
แต่ผมน่ะ ไม่ได้ฝึกงานกับเค้าหรอก ทำไมน่ะหรอ . . เพราะปีที่แล้วฝึกไปแล้วไง ปีนี้เลยไม่อยากฝึก !!
จริงๆแล้วมันคือข้ออ้างที่ทำให้ดูสวยหรูครับ ฮ่าๆ เหตุผลจริงๆคือ ไม่มีใครเค้าเอา (ไม่ได้ส่ง Resume - -")
นั่นก็เป็นเหตุทำให้ผมได้ใช้เวลาว่างๆในช่วงปิดเทอม ลองทำอะไรหลายๆอย่าง จนมันโคตรจะไม่ว่าง
รวมถึงการที่ได้ใช้เวลานั่งคิดอะไรหลายๆอย่าง จนทำให้เกิด Idea สำหรับ Entry นี้ขึ้นมาครับ
 
สำหรับ Entry นี้จะค่อนข้างมีสาระในเชิงวิชาการหน่อยนะครับ
อ้อ . . ลืมบอกไปครับ ว่าผมเรียนอยู่คณะ IT วันๆก็จะเจอแต่การเขียนโปรแกรมอย่างหลีกเลี่ยงไม่ได้
วันนี้ผมจะนำเสนอเทคนิคการเขียนโปรแกรมในแบบฉบับของผมครับ
 
เพื่อนๆ พี่ๆ น้องๆ หลายๆท่านเคยสงสัยมั้ยครับ ว่าทำไมคนที่เขียนโปรแกรมเก่ง มันก็เก่งชิบหายเลย
หรืออาจจะไม่ถึงขั้นเก่ง แต่ก็สามารถเขียนโปรแกรมแก้ไขปัญหาแบบ Basic ได้เกือบทุกรูปแบบ
คนไหนที่เขียนโปรแกรมไม่ได้ พยายามเขียนเท่าไหร่ เขียนเป็นวัน มันก็ยังเขียนไม่ได้อยู่อย่างนั้น
ผมได้ใช้เวลาส่วนหนึ่งของปิดเทอม นั่งวิเคราะห์ครับ ว่าปัญหาเหล่านี้เกิดจากอะไร ?
 
จากประสบการณ์การเขียนโปรแกรมของผม ตั้งแต่ ม.4 โง่ๆ กากๆ จนเริ่มเขียนเป็น
จนถึงทุกวันนี้ ที่ได้มีโอกาสถ่ายทอดความรู้ ประสบการณ์ ให้คนอื่นอยู่หลายครั้ง
มันทำให้ได้ข้อสรุปดังนี้ครับ
 
1. เข้าใจการทำงานของ Syntax ที่ใช้ . . อย่างละเอียด !!
เรื่องนี้เป็นเรื่องสำคัญที่ใครหลายๆคนมองข้ามครับ
เมื่อคุณไม่เข้าในการทำงานของ Syntax แต่คุณอยากจะเขียนโปรแกรมได้ อยากจะเก่ง . . ตลกมั้ยครับ ?
" . . เหมือนคุณอยากยิงปืนให้โดนหัวผู้ร้าย แต่คุณยังไม่รู้วิธีใส่กระสุนปืน . . "
บางคน ยังไม่รู้ว่า คำสั่ง "for" ทำงานยังไง . . ใส่ไปเพียงแค่คิดว่า "for คือ loop โปรแกรมนี้ต้องมี loop"
สุดท้ายก็ได้แต่พยายามใส่ค่าไปมั่วๆ เปลี่ยนตัวเลขมั่ง เปลี่ยนเครื่องหมายดูมั่ง เปลี่ยนตัวแปรดูมั่ง
รอเวลาที่มันจะ "ฟลุ๊ค" ถูกขึ้นมา แล้วก็หลอกตัวเองว่า "ฉันเขียนได้แล้ว" . . น่าขำมั้ยครับ
หรือถ้ามั่วไม่ถูกซักที ก็เอา code ไปถามคนที่เก่งกว่าว่า ทำไมมันถึงรันไม่ได้ ทำไมมันถึงผิด . .
" . . เหมือนคุณถามว่า ทำไมผู้ร้ายไม่ตาย . . ทั้งๆที่คุณใส่กระสุนปืนกลับด้าน . . "
ยอมเสียเวลาทำความเข้าใจ Syntax อย่างละเอียดซักนิด (ทำความเข้าใจในที่นี้หมายถึง
ลองฝึกใช้จนแน่ใจแล้วว่าเข้าใจจริงๆ) แล้วคุณจะเขียนโปรแกรมได้ดีขึ้นอย่างแน่นอนครับ
 
2. Code ที่เขียนเอง . . ถ้าตัวเองไม่เข้าใจ . . แล้วจะหวังให้ใครมาเข้าใจ . . !!
หลายครั้งครับ ที่ผมเจอคนที่เขียนโปรแกรม โดยไม่เข้าใจความหมายของแต่ละบรรทัด ว่าเขียนขึ้นมาเพื่ออะไร
ผมอยากจะบอกว่ามันเป็นสิ่งที่สำคัญมากๆครับ สำหรับการทำความเข้าใจ Code ของตัวเอง
คุณอยากทำอาหารให้อร่อย แต่ไม่รู้ว่าใส่น้ำปลาไปเพื่ออะไร ใส่น้ำตาลไปเพื่ออะไร
ก็คงได้แต่รอว่าเมื่อไหร่มันจะ "ฟลุ๊ค" อร่อยขึ้นมาแหละครับ
ทุกบรรทัดที่ใส่ลงไปมันมีความหมาย ไม่ใช่ว่าใส่มั่วๆ เดาๆ แล้วมันจะผ่าน
การเขียนโปรแกรม ทุกอย่างมีเหตุมีผล มีหลักการ มีกฏตายตัวชัดเจน ใส่ไปมั่วๆมันไม่ผ่านหรอกครับ
จะต้องคิดอย่างมีหลักการ ว่าจะใส่ code อะไรลงไป ใส่บรรทัดไหนก่อน ใส่บรรทัดไหนทีหลัง
ขอเน้นอีกครั้งครับว่า "ต้องเข้าใจว่าแต่ละคำสั่งที่ใส่เข้าไป เราใส่ไปเพื่ออะไร ไม่ใส่ได้มั้ย ?"
 
เมื่อคุณสามารถผ่านข้อ 1 และ ข้อ 2 มาได้แล้ว แสดงว่าคุณเริ่มที่จะเขียนโปรแกรม "เป็น" ขึ้นมาบ้างแล้ว
ถ้าหากผมมีเวลา จะเขียนเทคนิคการเขียนโปรแกรมให้ "เก่ง" ในแบบฉบับของผมนะครับ
 
ป.ล. ถ้าบทความนี้ Hardcore เกินไป ขออภัยครับ
ป.ล.2 บทความนี้เกิดจากประสบการณ์ส่วนตัวล้วนๆครับ ใครมีความเห็นขัดแย้งกรุณาชี้แนะ

edit @ 20 Jul 2011 00:31:45 by BlacKCaT

สำหรับคนที่เริ่มเขียนโปรแกรมใหม่ๆ คงจะมีปัญหาเหมือนๆกันว่า

โจทย์ข้อนี้จะเขียนยังไงดี มันมืด 8 ด้านไปหมด คิดเท่าไหร่ก็คิดไม่ออก

แต่มันตรงกันข้ามกับบางคนที่เขียนโปรแกรมมานานแล้ว ที่พอเห็นโจทย์ปุ๊บ

algorithm ต่างๆก็ไหลเข้ามาเองโดยแทบจะไม่ต้องหยุดคิด

ทำไมมันถึงเป็นเช่นนั้น ? ทั้งๆทีคน 2 ประเภทนี้ก็ไม่ได้ฉลาดหรือเก่งไปกว่ากันเลย

จากข้อสังเกตของผมเอง มันอาจจะเป็นเพราะว่า ไอคนที่เห็นโจทย์ปุ๊บ คิดออกทันทีน่ะ

เขาผ่านอารมณ์ "คืนหนึ่ง" ของการเขียนโปรแกรมมาแล้ว

 

แล้วอะไรมันคือไอ้เจ้าอารมณ์คืนหนึ่งหละ ?

อารมณ์คืนหนึ่งนี้ ก็ตามชื่อแหละครับ คืนหนึ่ง ที่คุณกำลังนั่งเขียนโปรแกรม

คิดเท่าไหร่ก็คิดไม่ออก คิดจนหัวจะระเบิด . . แต่สุดท้าย คุณก็ทำโจทย์นั้นได้สำเร็จ ด้วยตัวเอง

ย้ำนะครับ ว่า ด้วยตัวเอง ไม่ได้ไปดู code หรือ algorithm ของใครเค้ามา

ไม่ว่าจะใช้เวลานานกี่นาที กี่ชั่วโมง หรือ กี่วันก็ตาม และถึงแม้ว่ามันจะเป็นโจทย์ง่ายแสนง่าย

แต่เชื่อเถอะครับ หลังจากที่คุณผ่านอารมณ์คืนหนึ่งนี้มาแล้ว คุณจะสามารถเขียนโปรแกรมได้ดีขึ้น

อย่างน้อยๆ ถ้าเจอโจทย์แนวเดียวกันนี้ คุณก็สามารถแก้โจทย์ได้เร็วขึ้น เพราะคุณเคยผ่านมันมาแล้ว

คุณเคย ฝึกคิด และ แก้ปัญหาได้ด้วยตัวของคุณเองมาแล้ว

 

โดยส่วนตัวผมคิดว่า คนที่เขียนโปรแกรมเก่ง ไม่ใช่เพราะเขาอัจฉริยะ ถึงจะมีส่วน แต่ก็เป็นส่วนน้อย

แต่ผมคิดว่า คนที่เขียนโปรแกรมเก่ง เกิดจากการที่เค้าผ่านอารมณ์ "คืนหนึ่ง" มามากมาย นับครั้งไม่ถ้วน

ซึ่งมันแตกต่างจากคนที่ พอเขียนไม่ได้นิดหน่อยก็เลิกทำ หรือไปดูเฉลย มันจึงไม่แปลกเลย

ที่คนเหล่านี้จะเขียนโปรแกรมไม่ได้เก่งขึ้นเลยแม้แต่น้อย . . เพราะเค้าไม่ได้ฝึกแก้ปัญหาด้วยตัวเอง

 

ที่มาเขียน Blog นี้ก็เพราะว่าเพิ่งผ่านอารมณ์คืนหนึ่งมาสดๆร้อนๆ

code เกินมา 2 ตัวอักษร แต่นั่ง debug อยู่ 2 วัน T^T

แต่สุดท้ายก็ทำเสร็จ ฮ่าๆๆ

 

สำหรับคนที่กำลังเจอกับอารมณ์ "คืนหนึ่ง" ของการเขียนโปรแกรมอยู่

ก็ขอให้พยายามผ่านมันไปให้ได้ด้วยตัวของคุณเองนะครับ ^^

Lecture Structure 16/01/09

posted on 16 Feb 2009 11:36 by skblackcat in Programming

structure
ทำไมถึงต้องมี ?
ถ้าเราจะเก็บข้อมูลหนังสือ 100 เล่ม ซึ่งประกอบด้วย ชื่อหนังสือ ผู้แต่ง วันที่พิมพ์ . . .
Structure ไม่ใช่ตัวแปร เป็นแม่แบบ ที่เราจะเก็บข้อมูล

struct book {            /* structure template: tag is book     */

    char title[MAXTITL];

    char author[MAXAUTL];

    float value;

};                       /* end of structure template           */
    struct book library; /* declare library as a book variable  */

ใน structure จะเป็นอะไรก็ได้ array int char float structure
ใกล้เคียงกับสิ่งที่เรียกว่า class

เราจะเข้าถึงตัวแปร library ได้ยังไง คือใช้ .

library.author
library.value
library.value

author , value , title เรียกว่า field

ถ้าอยากได้ address ของ library ไม่สามารถใช้ชื่อ library เลยได้
ถ้าจะใช้ struct แค่ครั้งเดียว ทำแบบนี้ก็ได้

struct {         /* no tag */

    char title[MAXTITL];

    char author[MAXAUTL];

    float value;

} library;

คือจะมี structure ชื่อ library แค่ตัวเดียว

ประกาศ template คือ struct {}
ประกาศตัวแปร structure คือ struct book library;

จะกำหนดค่าตั้งต้นให้ structure ก็เหมือ array
struct book library = { ... , ... , ...};

array of structures

struct book library[MAXBKS]; /* array of book structures */

library[1].title[5]

struct names {                     // first structure

    char first[LEN];

    char last[LEN];

};

 

struct guy {                       // second structure

    struct names handle;           // nested structure

    char favfood[LEN];

    char job[LEN];

    float income;

};

b.handle.first

struct names c;
c = b.handle;
c.first

him = &fellow[0];

(*him).income == him->income
จะใช้ -> ได้ ตัวหน้าต้องเป็น pointer

ส่ง structure ไปยัง function
- address
- structure
- ส่งทีละค่า

save structure ลง ไฟล์
sizeof ถ้ามีวงเล็บ จะต้องเป็นประเภทตัวแปร ถ้าไม่มีวงเล็บ ต้องตามด้วยชื่อตัวแปร
fwrite(&primer, sizeof (struct book), 1, pbooks);
fread()
ใช้ structure เขียนลงไฟล์ ออกข้อสอบแน่นอน 100%

linked list
tree

unions
คล้าย structure แต่ไม่เหมือน จะมีกี่ field ก็แล้วแต่ แต่เก็บได้แค่ field เดียว

fit.digit = 10;
fit.letter = 'a'; digit ก็จะหายไป
เวลาจอง memory ก็จะจองตามจำนวนขนาดที่ใหญ่ที่สุดในนั้น
การ initial ค่า 3 แบบ
union hold valA;

valA.letter = 'R';

union hold valB = valA;  // initialize one union to another

union hold valC = {88};  // initialize digit member of union

union hold valD = {.bigfl = 118.2};  // designated initializer

Enumerated Types

enum spectrum {red, orange, yellow, green, blue, violet};
enum spectrum color;
int c;
color = blue;
if (color == yellow)
   ...;
for (color = red; color <= violet; coloc++)
   ...;

จะเหมือนค่า int
เวลา print ก็ต้อง %d

พยายามดูตัวอย่าง code และทำความเข้าใจ

typedef unsigned char BYTE;

 

Storage Classes , Linkgage
เป็นเรื่องเกี่ยวกับตัวแปร
 - มี scope อย่างไร หมายถึงช่วง หรือ ระยาพื้นที่ที่ตัวแปรนั้นเป็นที่รู้จัก เช่น global , local variable ก็มี scope ต่างกัน
Linkage ตัวแปรจะรู้จักได้ในไฟล์อื่นๆมั๊ย
ภาษา C มี storage class 5 รูปแบบ แบบที่ 6 เป็นแบบ manual ต้องจอง พท เอง ทำอะไรเอง

scope
หมายถึง พท ที่สามารถเข้าถึงตัวแปรนั้นได้ คือ พท ที่รู้จักตัวแปรนั้น มี 3 แบบ
 - block scope ตัวแปรที่อยู่ในฟังก์ชั่น main ฟังก์ชั่นย่อย เป็นตัวแปรที่อยู่ใน block ของมัน ( เครื่องหมายปีกกา)
เช่น
int m=2;
{
int m=3;
}
การอ้างถึงตัวแปร จะพยายามอ้างตัวแปรที่อยู่ใน scoe ของมัน ถ้าไม่มี ก็จะหาใน scope ที่ใหญ่ขึ้น
block scope จะมีระยะเวลาการเกิดของมัน คือ จะถูกทำลายเมื่อจบ block
for (i = 0; i < 10; i++) {  
double q = cleo * i;
...
patrick *= q;
 }
ตัวแปร q ก็จะมีการประกาศใหม่ทุกรอบการวนลูป
 - function prototype scope
int mighty(int mouse, double large);
ตัวแปร mouse และ large จะเป็น function prototype scope
 - file scope
คือ สามารถเรียกได้ทั้งไฟล์ ประกาศนอกฟังก์ชั่น (หลัง #)
linkage
ตัวแปรนี้ สามารถเรียกใช้ได้ยังไง ที่ไหน อย่างไร
external linkage คือ ตัวแปรสามารถที่จะถูกเรียกใช้ได้จากไฟล์อื่นที่อยู่ใน folder , project เดียวกัน
internal linkage คือ ตัวแปรสามารถเรียกใช้ได้แค่ภายในไฟล์
no linkage คือ ตัวแปรที่ ไม่สามารถเรียกได้จากที่อื่น

ใน file scope จะมีแค่ external , internal
ประกาศตัวแปรปกติ จะเป็น external อยู่แล้ว
ถ้าอยากให้เป็น internal จะต้องใส่ข้างหน้าตอนประกาศว่า static
ถ้าอยากใช้ตัวแปรที่อยู่ไฟล์อื่น ก็ประกาศว่า extern int i; คือจะหาตัวแปร i จากไฟล์อื่น
แต่ถ้ามีตัวแปร i มากกว่า 1 ไฟล์ ก็จะเจ๊งกะบ๊งไปเลย
storage duration ระยะเวลาที่มันมีชีวิตอยู่
 - static storage duration เมื่อเกิดมาแล้วก็จะคงอยู่เรื่อยๆจนกว่าจะปิดโปรแกรม
มีใน file scope
 - automatic storage duration
เมื่อจบ block ก็จะหายไปอัตโนมัติ มีใน block scope

Scope Linkage Duration
-Bock No Automatic (static ได้ด้วย)
-File External Static
 Internal Static
ในกรณี Global Variable static จะบอกว่าเป็น internal หรือ external
ในกรณี Local Static จะบอกว่าเป็น Automatic หรือ Static

ตารางหน้า 9

Automatic Variable
ก็จะใช้ได้แค่ใน block
Register Variable
เหมือน Automatic แต่เก็บไว้ใน Registeri
Static variable with block scope
คือตัวแปรแบบ block scope จะไม่ถูกทำลายแม้มันออกจาก block
เมื่อมันเข้ามาอีกครั้งหนึ่ง ก็จะเอาค่าเดิมมาประมวลผลต่อ

ตัวแปร static ถึงไม่ initial ค่า ก็จะมีค่าเริ่มต้นเป็นต่ำสุดเสมอ เช่น int เป็น 0

Static variable with eternal linkage
Static variable with Internal linkage
Storage classes and funcitons
ฟังก์ชั่น ไม่มี block scope
ถ้าจะให้ไฟล์อื่นใช้ ฟังก์ชั่น ต้องโปะหน้าด้วย extern เหมือนตัวแปร
Allocate memory
malloc return ค่าเป็น pointer to character เสมอ
double * ptd;
ptd = (double *) malloc(30 * sizeof(double));

long * newmem;
newmem = (long *)calloc(100, sizeof (long));

Lecture C 26/01/2009

posted on 26 Jan 2009 11:25 by skblackcat in Programming

ปกติจะประกาศ string โดยการใช้ array of character
string ต่างจาก array of character ตรงที่มี \0 มีไว้เพื่อบอกว่า string จบอยู่ที่ตรงนี้
เวลาจองเนื้อที่ จะต้องจองเผื่อ \0 ไว้ด้วย 1 ที่ ไม่งั้นอาจจะทำให้โปรแกรมผิดพลาดได้ โดยเฉพาะเวลาแสดงผล
วิธีการประกาศ string มีหลากหลายวิธีการ

#define MSG "You must have many talents. Tell me some." // เป็นค่าคงที่
#define LINELEN 81
char name[LINELEN];
char talents[LINELEN];
const char m1[40] = "Limit yourself to one line's worth.";  //ถ้าจองพื้นที่ array มาไม่ครบ บาง compiler ก็จะตัดให้พอดีกับที่จอง บาง compiler ก็จะใส่ต่อไปใน memory เลย
const char m2[] = "If you can't think of anything, fake it.";
char *m3 = "\nEnough about me -- what's your name?";  //การประกาศโดยใช้วิธี pointer ต้องมีการ malloc ด้วย ไม่งั้นอาจจะไปกินเนื้อที่ส่วนอื่นของ memory
const char *mytal[LIM] = {"Adding numbers swiftly", "Multiplying accurately", "Stashing data", "Following instructions to the letter", "Understanding the C language" };
อ่านว่า ตัวแปร mytal เป็น array ขนาด 5 ช่อง ของ pointer ประเภท character ซึ่งเป็น const

char *m3 กับ char m3[] ไม่เหมือนกัน อันแรกเป็น pointer อันหลังเป็น array แต่ให้ผลคล้ายกันมากๆๆๆๆๆๆๆ

const char m1[40] = "Limit yourself to one line's worth.";
const char m1[40] = { 'L', 'i', 'm', 'i', 't', ' ', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', ' ', 't', 'o', ' ', 'o', 'n', 'e', ' ', 'l', 'i', 'n', 'e', '\", 's', ' ', 'w', 'o', 'r', 't', 'h', '.', '\0' };

ได้ผลเหมือนกัน

char m5[50][50]l
m5[0]="------------";
m5[1]="------------";
แบบนี้ก็ใช้ได้เหมือนกับ char m5[50][50]={"--------","---------"};

const char *mytal[LIM] = {
   "Adding numbers swiftly",
   "Multiplying accurately",
   "Stashing data",
   "Following instructions to the letter",
   "Understanding the C language“
  };

แบบนี้ก็ใช้ได้

การ copy string

const char * mesg = "Don't be a fool!";
const char * copy;
copy = mesg;

mesg กับ copy จะชี้ไปที่ตัวเดียวกัน
gets() คือจะรับค่าเข้ามาจนกว่าจะได้รับ '\n ' ถึงจะหยุดรับค่า แต่ไม่รับ \n เข้ามา

// เซ็งหวะ รู้สึกไม่มีแรงจะทำอะไรแล้ว

fgets() เอาไว้รับข้อมูลจาก file แต่ก็เอามารับข้อมูลจาก keyboard ได้ด้วย
การที่ gets() รับตัวอักษรมาหมด ก็เป็นจุดอ่อนอย่างนึง คือถ้าป้อนมาเกินเนื้อที่ที่จองไว้ มันก็จะไปโปะต่อ
ป้องกันโดยการใช้ fgets()
ถ้าประกาศมา n ช่อง ก็จะอ่านแค่ n-1 ตัว เพราะมี \0 ด้วย
fgets(c,10,stdin)
อันแรกคือชื่อตัวแปร
อันที่สองคือ อ่านทั้งหมดกี่ตัว (อ่าน \n ด้วย)
อันที่สามคืออ่านจากไฟล์ชื่ออะไร แต่ถ้ารับจาก keyboard ใส่ว่า stdin

ptr = fgets(name, MAX, stdin);

สิ่งที่ fgets return ออกมาคือ address ของ name
ถ้าเกิดการผิดพลาด ก็จะ return ออกมาเป็น null

scanf()
รูป slide หน้า 19

เวลาใช้ for scanf() อาจะจไม่ได้ scanf ทุกรอบ จะ รับตัวที่อยู่ใน queue ให้หมดก่อน

puts() ขึ้นบรรทัดใหม่เสมอ

fputs() ก็คล้ายๆกับ fgets()
fputs() ไม่ขึ้นบรรทัดใหม่ให้

strlen() ใช้นับความยาว
strcat(flower,addon) คือการเอา ตัวหลัง มาต่อท้ายตัวแรก แล้วเก็บเข้าไปในตัวแรก

strncat()
strcmp() คือการเปรียบเทียบ string

return 1 คือ ตัวหน้ามากกว่าตัวหลัง
return -1 คือ ตัวหน้าน้อยกว่าตัวหลัง
return 0 คือ เท่ากัร

strcpy()
slide หน้า 33

strncpy()

a="AB"
b=a
if(a==b) มันคือการเปรียบเทียบ address

char *strchr(const char * s, int c); //ฟังไม่ทัน

char *strpbrk(const char * s1, const char * s2);
จะ return address ตัวแรกของ ตัวหน้า ที่มีในตัวหลัง
เช่น abc,bc ก็จะ reuturn address ของ b

char *strrchr(const char * s, int c); // ฟังไม่ทัน

char *strstr(const char * s1, const char * s2);
คือเอา string ตัวหลังทั้งตัวไปหาในตัวหน้า ถ้ามีก็ return address ออกมา

การรับค่าตัวแปรผ่านทาง cmd line
รูปหน้า 36
int main(int argc,char*argv[]){
}
argc บอกว่ามีกี่ตัว
argv คือ array เอาไว้เก็บ string ที่รับเข้ามา
เช่น โปรแกรมชื่อ blackcat
blackcat is a handsome man
argc = 5
argv ก็จะได้ {"blackcat","is","a","handsome","man"}

คราวหน้า quiz โว้ย

edit @ 26 Jan 2009 11:25:31 by BlacKCaT