2015-06-18 15 views
5

trong C++ nếu tôi xác định một cấu trúc như thế nàyC cấp phát bộ nhớ ++ struct

struct ComplexFloat { 
    float r; 
    float i; 
}; 

và tôi tuyên bố hai biến như thế này

struct ComplexFloat cf; 
float *f=(float*)cf; 

Tôi có thể giả định rằng các điều kiện sau đây sẽ luôn luôn đúng

(&(cf.r)==&(f[0]) && &(cf.i)==&(f[1])) 

?

Nói cách khác, tôi có thể giả định rằng trong cấu trúc có chứa phao, các phần tử của nó sẽ chiếm vị trí tiếp giáp trong bộ nhớ và sẽ được sắp xếp theo thứ tự xuất hiện trong định nghĩa cấu trúc không?

Tôi đã thử nghiệm và đó là trường hợp với gcc 4.8.2 trên Ubuntu, tôi chỉ muốn đảm bảo rằng nó luôn hợp lệ.

+0

Biểu thức đó thậm chí sẽ không biên dịch, 'cf' không phải là mảng hoặc con trỏ. –

+0

Nếu điều này là dành cho sự tò mò học tập, nó là tốt nhưng nếu nó là dành cho mã sản xuất, bạn có thể muốn suy nghĩ lại thiết kế của bạn. –

+0

cảm ơn @JoachimPileborg, tôi đã sửa câu hỏi – oromoiluig

Trả lời

2

Không, bạn không thể giả định rằng tôi sẽ ở đúng nơi trừ khi bạn kiểm soát việc căn chỉnh dữ liệu trong cấu trúc. Có thể có sự sắp xếp liên kết giữa r và i

+0

Chúng phải theo cùng thứ tự mặc dù –

Các vấn đề liên quan