C là một ngơn ngữ lập trình có cấu trúc, tuy vậy nó vẫn chứa một số câu lệnh làm phá vớ cấu trúc của chương trình:
Bài 11 Các Kiểu dữ liệu Nâng cao và Sắp xếp Mục tiêu:
11.1.5 Cấu trúc lồng trong cấu trúc
Một cấu trúc có thể lồng trong một cấu trúc khác. Tuy nhiên, một cấu trúc khơng thể lồng trong chính nó. Rất nhiều trường hợp thực tế địi hỏi có một cấu trúc nằm trong một cấu trúc khác. Xét ví dụ, để lưu trữ thông tin về những người mượn sách và chi tiết của quyển sách được mượn ta có thể sử dụng cấu trúc sau:
struct issue {
char borrower [20]; char dt_of_issue[8]; struct cat books; }issl;
Câu lệnh này khai báo books là một thành phần của cấu trúc issue. Bản thân thành phần này là một cấu trúc kiểu struct cat. Biến cấu trúc trên có thể được khởi tạo như sau:
struct issue issl = {“Jane”, “04/22/03”, {“Illusions”, “Richard Bach”, 2, 150.00}};
Các dấu ngoặc lồng nhau được sử dụng để khởi tạo một cấu trúc nằm trong một cấu trúc.
Đối với biến cấu trúc có thành phần là một cấu trúc khác, việc truy cập các thành phần của biến này hoàn tồn tương tự đối với một biến cấu trúc thơng thường. Chẳng hạn, để truy cập vào tên của người mượn ta dùng lệnh là:
issl.borrower
Tuy nhiên, để truy cập thành phần author của biến cấu trúc cat mà biến cấu trúc này lại là thành phần của một biến cấu trúc issl ta sử dụng lệnh sau:
issl.books.author
Mức độ lồng của các cấu trúc chỉ bị giới hạn bởi dung lượng hiện thời của bộ nhớ. Có thể có một cấu trúc lồng trong một cấu trúc rồi lồng trong một cấu trúc khác và v.v… Tên của các biến thường được đặt theo cách thức gợi nhớ nội dung thơng tin mà nó lưu trữ. Ví dụ như:
company.division.employee.salary
Cũng cần nhớ rằng nếu một cấu trúc được lồng trong một cấu trúc khác, nó phải được khai báo trước cấu trúc khác sử dụng nó.