C FAQ trả lời chính xác câu hỏi này. Câu trả lời nhanh là cấu trúc này sẽ bao gồm các mảng double
bên trong cấu trúc chứ không phải là một con trỏ tới một mảng bên ngoài cấu trúc. Như một ví dụ nhanh chóng, bạn có thể sử dụng cấu trúc của bạn như trong ví dụ này:
struct s mystruct = malloc(sizeof(struct s) + 5 * sizeof(double));
s.n = 12;
s.d[0] = 4.0;
s.d[1] = 5.0;
s.d[2] = 6.0;
s.d[3] = 7.0;
s.d[4] = 8.0;
Và vân vân - kích thước của mảng mà bạn quan tâm được bao gồm trong việc phân bổ, và sau đó bạn có thể sử dụng nó giống như bất kỳ mảng . Thông thường một kiểu như vậy có chứa kích thước như một phần của cấu trúc, vì việc sử dụng thủ thuật +
để bỏ qua một mảng kiểu s
sẽ nhất thiết phải phức tạp bởi tình huống này.
Để thêm câu hỏi của bạn 'làm thế nào là xây dựng này nhiều hơn hoặc ít hơn mạnh mẽ hơn giữ [con trỏ] làm yếu tố thứ 2?', Nó không còn mạnh mẽ mỗi se, nhưng bạn không cần phải giữ một con trỏ xung quanh, vì vậy bạn sẽ tiết kiệm được ít nhất không gian đó - cũng như khi bạn sao chép cấu trúc, bạn cũng sẽ sao chép mảng, chứ không phải là con trỏ tới mảng - một sự khác biệt tinh tế đôi khi, nhưng rất quan trọng vào những thời điểm khác. 'Bạn có thể-làm-nó-trong-nhiều cách' có lẽ là một lời giải thích tốt, nhưng có những trường hợp mà bạn đặc biệt muốn một thiết kế hay cái kia.
Nguồn
2010-06-15 17:36:12
Ah, đây là một ví dụ điển hình cho thấy rằng các mảng và con trỏ không giống nhau :) – fredoverflow