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

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

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

ditter
PHP Newbie
PHP Newbie
โพสต์: 4
ลงทะเบียนเมื่อ: 30/05/2012 2:30 pm

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

โพสต์ที่ยังไม่ได้อ่าน โดย ditter »

โค้ด: เลือกทั้งหมด

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
โพสต์: 480
ลงทะเบียนเมื่อ: 25/01/2010 11:57 pm
ติดต่อ:

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

โพสต์ที่ยังไม่ได้อ่าน โดย touleg »

โค้ด: เลือกทั้งหมด

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 เป็นเหมือนกับชนิดข้อมูลอย่างหนึ่ง ที่เราสามารถกำหนดขึ้นมาเองได้ และสามารถเก็บข้อมูลได้หลากหลาย ซึ่งอาจจะเก็บได้หลายชนิด หรือเก็บได้หลายค่า ตามที่เราต้องการ

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

โค้ด: เลือกทั้งหมด

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
โพสต์: 4
ลงทะเบียนเมื่อ: 30/05/2012 2:30 pm

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

โพสต์ที่ยังไม่ได้อ่าน โดย ditter »

อ่อ เข้าใจละครับ มันซ้อนกันอยุ่นี่เอง อิอิ พอดีพื้นฐานไม่แน่นเลยมองไม่ออกครับ
อีกอย่างนึงครับพารามิเตอร์ตัวที่สามทำไมต้องมีสองวงเล็บด้วยอะครับ
touleg
PHP Super Member
PHP Super Member
โพสต์: 480
ลงทะเบียนเมื่อ: 25/01/2010 11:57 pm
ติดต่อ:

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

โพสต์ที่ยังไม่ได้อ่าน โดย touleg »

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

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

เพราะฉะนั้น name3 จะเท่ากับ (const char *)(&name3) ได้ค่าเดียวกัน
ditter
PHP Newbie
PHP Newbie
โพสต์: 4
ลงทะเบียนเมื่อ: 30/05/2012 2:30 pm

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

โพสต์ที่ยังไม่ได้อ่าน โดย ditter »

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

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: Google Adsense [Bot] และบุคลทั่วไป 4