Mục đích của kiểu cấu trúc struct trong c là gì?

Mình đọc và cố hiếu các thư viện của con ARM STM32. Nhưng thất bại và không hiểu gì hết ?
Thấy trong đó có rất nhiều khai báo kiểu biến struct. Và hình như trong các driver của linux cũng rất nhiều kiểu biến dạng struct.
Vậy mục đích của nó là gì vậy ?

Cái này là do đạo hữu tu luyện không kỹ, đốt cháy giai đoạn, chỉ tu chân mà không tu tâm thành ra căn cơ không vững nên khó lòng tu luyện tiếp. :smiley:

Nay bần đạo xin gửi đạo hữu mẩu code pháp này để bù đắp chỗ thiếu sót kia. :kissing:


Nếu đạo hữu tu luyện thấy hợp thì có thể ghé lại đây để xem toàn bộ bộ code pháp. :innocent:

12 Likes

Bạn biết đấy, trong C có những kiểu dữ liệu như double, int, char, bool… rất nhiều nhưng đặc điểm chung của nó là chỉ lưu 1 loại dữ liệu và 1 giá trị.
Nhưng thông tin về một cái gì đó thì lại có rất nhiều thông tin khác nhau. Và người ta muốn nó lưu được nhiều thứ khác nhau chỉ trong 1 biến. Thế thì người ta tạo ra struct để người lập trình tự tạo ra loại dữ liệu nào đó để lưu được nhiều thông tin hơn.

Ví dụ về em có các thông tin : tên, tuổi, quê quán, vân tay, nhận dạng… Rõ ràng với nhiều thông tin khác nhau như thế thì không thể cầm một đống giấy tờ theo mà mỗi giấy chỉ lưu tên, tuổi…
Mà người ta sẽ gom nó lại trong một cái căn cước công dân, bằng lái xe, bằng tốt nghiệp, bảo hiểm…

Còn trong lập trình ARM, nó giúp việc truy cập thanh ghi dễ dàng và tường minh hơn. Bằng việc khai báo 1 struct có cấu trúc tương đồng với một thanh ghi hay vùng nhớ nào đó và đặt chúng trùng khớp địa chỉ với nhau. Thông qua cấu trúc struct mà người ta can thiệp vào bộ nhớ một cách dễ hiểu thay vì các con số địa chỉ khó nhớ.

8 Likes

Cám ơn các bạn.
Với kiểu cấu trúc, chúng ta có thể điều khiển cấu trúc chuơng trình, là các layer. Nói cách khác là hướng đối tượng.
Các bạn có thể cho mình vài lời về vấn đề này được không ? mình rất mơ hồ.

Bạn lại hiểu nhầm rồi.
C không có hướng đối tượng và struct cũng không phải để tách lớp hay điều khiển cấu trúc chương trình.
Mục đích chính của là gom các dữ liệu liên quan đến nhau thành một loại dữ liệu để dễ sử dụng, quản lý.

Để dễ hình dung thì đề bài là hãy viết chương trình lưu và xử lý thời gian thực.
Nếu không có struct thì phải khai báo biến thế này:

int year, month, day, hour, min, sec, millisec;

Và để truyền cái thời gian này vào hàm nào đó thì phải khai báo hàm thế này:

void time_proc(int year_in, int month_in, int day_in, int hour_in, int min_in, int sec_in, int millisec_in, int *year, int *month, int *day, int *hour, int * min, int * sec, int *millisec);

Vật vã.

Và giờ có struct:

DateTime time;
void time_proc(DateTime in, DateTime *out);
8 Likes

Thật sự là có thể lập trình hướng đối tượng với C.
Đây là sách trên amazon.
Extreme C: Taking you to the limit in Concurrency, OOP, and the most advanced capabilities of C.
Các bạn có thể đọc thư viện của STM32, nó rất rối.

1 Like

Ừ cậu, tớ nghĩ cậu đúng với điểm có thể lập trình OOP trên C. Tuy nhiên, ý của @Duong_Act là C không support OOP feature theo design của ngôn ngữ.

Ngoài ra, tớ có thắc mắc này, cậu có thể cho tớ biết sao cậu lại cố đọc thư viện STM32 khi cậu chưa hiểu rõ concept struct không? Có vẻ như cậu underknowledge và đang làm điều quá sức, và điều này không được khuyến khích làm đâu, nó có thể gây hại cho cậu về sau đấy!

6 Likes

C không có OOP.
Chỉ có thể sử dụng con trỏ hàm trong struct để mô phỏng một cách viết và chức năng gần giống với override của OOP.

5 Likes

Thực ra hướng đi lâu dài của mình là Linux, hiểu biết và kinh nghiệm mình không có nhiều. Nên mình thử sức với lập trình nhúng.
Có bạn nào có tài liệu ngắn gọn về tách lớp và interface không ? Mình chỉ có ý niệm thôi chứ không hiểu rõ lắm ?

Anh/chị thử tham khảo link bài viết của anh Hoàng nhé.

3 Likes

Cậu nên bắt đầu chậm thôi Linh :smiley: . Hiểu biết và kinh nghiệm của cậu không có nhiều, cậu cũng không hiểu các concept cơ bản không chỉ trong C, và cả trong vi điều khiển, nhưng cậu đã lao vào đọc code thư viện, thì chắc chắn sẽ tốn thời gian và không mang lại nhiều kinh nghiệm cho cậu. Nó giống như khi cậu chưa có hiểu biết về cơ thể cậu, nhưng đã lao vào tập tạ với khối lượng gấp 3 lần khối lượng cơ thể cậu ngay từ ngày đầu tiên, uống protein không kiểm soát để tăng cơ mà bỏ qua các thành phần dinh dưỡng cơ bản khác cho cơ thể cậu, với hi vọng cậu có body như Terminator trong 2 tuần :smiley:

Sao phải vội thế à cậu? :smiley:

Đây tớ e cậu sắp đi lạc tới xứ sở thần tiên rồi :smile:
Nếu cậu muốn tập tạ 200kg, cậu cần tập với tạ nhỏ trước đã. Tớ recommend cậu học kỹ cơ bản với tài liệu mà @Sherly1001đã đưa cho cậu ngay từ comment đầu tiên:

Cậu nên luyện tập viết các chương trình nhỏ trước, hiểu cặn kẽ mọi ngóc ngách của chương trình đó, rồi mới đi lên dần với các cục tạ to hơn.
Nếu không, đây sẽ (đã) là outcome:

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?