ขอถามเรื่องภาษาซีครับ

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderators: mindphp, ผู้ดูแลกระดาน

ditter
PHP Newbie
PHP Newbie
Posts: 4
Joined: 30/05/2012 2:30 pm

ขอถามเรื่องภาษาซีครับ

Post by ditter » 30/05/2012 2:56 pm

Code: Select all

const struct fsdata_file file_STM32_0_html[] = {{file_STM32_LED_html, name_STM32_0,(const char *)(&name3),sizeof(name3)}}; 
คือผมโง่ภาษาซีมากครับ แบบว่าพื้นฐานน้อยมาก มาเจอโค็ดนี้ไม่เข้าใจเลย
1.ผมไม่เข้าใจเรื่องการใช้ประเภทตัวแปรเลยอะครับบรรทัดแรกมีการประกาศตัวแปรซ้อนกัน แล้วผมก็งงว่า ตกลงว่า file_stm32_0_html[] เป็นตัวแปรประเภทอะไรกันแน่
2.คำว่า fs_data_file นี่มันมีคความหมายว่าอะไรอะครับ แบบว่าเป็นคำสัท่ทำไรสักอยาง หรือว่าเป็นแค่ชื่อตัวแปรเฉยๆ
3.ตรงส่วนของ (const char*)(&name3) ผมไม่เคยเจอการเขียนโค๊ดระดับนี้มาก่อนเลยไม่เข้าใจว่าเค้ากำลังทำอะไรกับตรงนี้อะครับ โดยเแฉาพะเครื่องหมายดอกจันมาอยุ่ตรงนั้นแล้วมันหมายถึงอะไร งงมากเลยครับ


คือผมก้พยายามหาหนังสือมาอ่านนะครับ ซื้อหนังสือมาก็แล้ อ่านตามเวบก็แล้ว ก็ยังไม่เ้ข้าใจปัญหาที่บอกเลย แล้วถ้าใครรู้ว่าจะต้องอ่านตรงเรื่องไหนหัวข้อไหนถึงจะเข้าใจ ตรงส่วนนี้ ช่วยกรุณาบอกหน่อยนะครับ ผมจะได้ไปดูได้ถูกจุด และถ้าแนะนำหนังสือหรือแหล่งข้อมูลได้ยิ่งดีครับ

ขอบคุณล่วงหน้านะครับ

touleg
PHP Super Member
PHP Super Member
Posts: 480
Joined: 25/01/2010 11:57 pm
Contact:

Re: ขอถามเรื่องภาษาซีครับ

Post by touleg » 30/05/2012 5:20 pm

Code: Select all

const struct fsdata_file file_STM32_0_html[] = {{file_STM32_LED_html, name_STM32_0,(const char *)(&name3),sizeof(name3)}};
จากโค้ดเป็นการประกาศตัวแปรค่าคงที่ชนิดโครงสร้าง fsdata_file เป็น Array และกำหนดค่า Array เลย

fsdata_file คือ Structure เป็นเหมือนกับชนิดข้อมูลอย่างหนึ่ง ที่เราสามารถกำหนดขึ้นมาเองได้ และสามารถเก็บข้อมูลได้หลากหลาย ซึ่งอาจจะเก็บได้หลายชนิด หรือเก็บได้หลายค่า ตามที่เราต้องการ

โครงสร้างตามโค้ดด้านบนคือ

Code: Select all

const struct ชื่อStructure ชื่อตัวแปร[] = {{พารามิเตอร์ที่1, พารามิเตอร์ที่2,พารามิเตอร์ที่3,พารามิเตอร์ที่4}};
พารามิเตอร์ก็คือค่าที่เรากำหนดให้ อาจจะมาจากตัวแปร หรือกำหนดลงไปเองตรงๆเลยก็ได้ แค่ต้องตรงกับชนิดของค่าที่มารับด้วย


* คืออะไร ในที่นี้ * คือ Pointer มันคือตัวชี้ ที่ชี้ไปยังพื้นที่ใน Memory ที่ค่านั้นไปจองพื้นที่อยู่
& คืออะไร โดยปกติแล้วตัวแปรที่ประกาศขึ้นมา นอกจากจะเก็บค่าแล้ว มันยังมีพื้นที่ใน Memory ที่มันจองไว้เก็บค่านั่นแหละ ถ้าเราเรียกชื่อตัวแปรอย่างเดียวเราจะได้ค่าที่เก็บอยู่ในตัวแปรนั้น แต่ถ้าเราอยากได้ที่อยู่บน Memory ของตัวแปรนั้น ให้เราใช้ & (อ่านว่า Ampersand) ใส่ไว้หน้าตัวแปรที่ต้องการ เช่น &name จะได้ที่อยู่เริ่มต้นบน Memory ของตัวแปร name ที่จองไว้อยู่

การจองพื้นที่ของตัวแปรแต่ละชนิดไม่เหมือนกัน
short = 2byte
int = 2byte (C) หรือ 4byte (C++)
float = 4byte
double = 8byte
char = 1byte
เป็นต้น

1byte = 8bit

รายละเอียดจริงๆมีอีกเยอะครับ อธิบายแค่นี้ไม่เข้าใจหรอก
ส่วนเรื่องที่ต้องไปดูเลย ถ้าอยากเข้าใจในเรื่องนี้ก็คือ
1. เรื่องการประกาศตัวแปรประเภทต่างๆ รวมถึง Array ด้วย
2. Structure สร้างยังไง เอาไปใช้ยังไง
3. Pointer กับ Array มันเป็นยังไง แล้ว 2 อย่างนี้มันเหมือนและแตกต่างกันยังไงบ้าง แล้วนำไปใช้ยังไงได้บ้าง

ditter
PHP Newbie
PHP Newbie
Posts: 4
Joined: 30/05/2012 2:30 pm

Re: ขอถามเรื่องภาษาซีครับ

Post by ditter » 30/05/2012 9:52 pm

อ่อ เข้าใจละครับ มันซ้อนกันอยุ่นี่เอง อิอิ พอดีพื้นฐานไม่แน่นเลยมองไม่ออกครับ
อีกอย่างนึงครับพารามิเตอร์ตัวที่สามทำไมต้องมีสองวงเล็บด้วยอะครับ

touleg
PHP Super Member
PHP Super Member
Posts: 480
Joined: 25/01/2010 11:57 pm
Contact:

Re: ขอถามเรื่องภาษาซีครับ

Post by touleg » 31/05/2012 12:32 am

ditter wrote:อ่อ เข้าใจละครับ มันซ้อนกันอยุ่นี่เอง อิอิ พอดีพื้นฐานไม่แน่นเลยมองไม่ออกครับ
อีกอย่างนึงครับพารามิเตอร์ตัวที่สามทำไมต้องมีสองวงเล็บด้วยอะครับ
(const char *)(&name3) เขียนแบบนี้คือ Pointer ชี้ไปที่ Address นั้น สรุปก็คือจะได้ค่าปกติออกมา หรือจริงๆแล้วก็เท่ากับ name3 นั่นเอง

สมมุติ
name3 = 5
&name3 => Address ของ Name3
*(&name3) => ได้ 5

เพราะฉะนั้น name3 จะเท่ากับ (const char *)(&name3) ได้ค่าเดียวกัน

ditter
PHP Newbie
PHP Newbie
Posts: 4
Joined: 30/05/2012 2:30 pm

Re: ขอถามเรื่องภาษาซีครับ

Post by ditter » 31/05/2012 10:02 am

ขอบพระคุณมากครับเข้าใจแจ่มแจ้งเลยทีเดียว

Post Reply

Return to “Programming - C/C++ & java & Python”

Who is online

Users browsing this forum: No registered users and 71 guests