struct S {int a, b;} x;
struct extern S £ (); / * Cấu trúc trở lại chức năng * / int i;
x = f (); / * OK * /
i - f () .a; / * OK * /
fO.a ■ i; / * Không hợp lệ; f () không phải là một giá trị trái * /
(Việc chuyển nhượng cuối cùng, thậm chí nếu hợp lệ, sẽ là vô nghĩa. Hàm f sẽ trả về một bản sao
của một số cấu trúc, sau đó sẽ có một trong các thành phần của nó được sửa đổi, ngay trước khi toàn bộ bản sao đã được bỏ đi . ở cuối thé tuyên bố)
(Một số triển khai phi tiêu chuẩn C không cho phép các chức năng để trả lại các cấu trúc ở tất cả Trong số những người đó cho phép nó, một số ít không cho phép một cuộc gọi chức năng để có một hành lựa chọn áp dụng cho nó;.. họ sẽ xem xét bảng (). một để có một lỗi.)
Nếu biểu trước khoảng thời gian đã gõ vòng loại, hoặc nếu các thành viên không có gì, sau đó kết quả có sự kết hợp của cả hai tập của vòng loại.
Ví dụ
Việc chuyển nhượng sau đây là không hợp lệ vì X. một có kiểu int const, const đã được thừa hưởng từ x:
const struct {int a, b;} x; xa = 5; / * * Không hợp lệ /
Một biểu thức lựa chọn thành phần gián tiếp bao gồm một biểu thức postfix, các op-erator ->, và một tên. Các giá trị của biểu thức postfix phải là một con trỏ đến một cấu trúc hoặc công đoàn kiểu, và tên của nó phải là tên của một thành phần của cấu trúc hoặc công đoàn loại. Kết quả là các thành viên mang tên của công đoàn hoặc cấu trúc và là một giá trị trái; nó là modi¬fiable trừ các thành viên là một mảng. Biểu thức điện tử> tên là theo định nghĩa chính xác tương đương với biểu thức {* Ví dụ
Trong đoạn mã sau, cả hai thành phần của cấu trúc Point được thiết lập để 0.0 trong một thời trang đường vòng để chứng minh tính tương đương này:
Struct {float x, y; } Point, * Point_Ptr;
Point.X ¿0.0 ;. / * Sets x 0.0 * /
PointPtr = ¡¿Point;
Poiht_Ptr-> y B 0.0; / * Bộ y đến 0.0 * /
Nếu biểu trước -.> đã gõ vòng loại, hoặc nếu các thành viên không có gì, sau đó kết quả có sự kết hợp của cả hai tập của vòng loại
Một số triển khai C cho phép con trỏ null được sử dụng trên trái của người điều khiển lựa chọn gián tiếp. Áp dụng các toán tử địa chỉ & với kết quả và đúc mà dẫn đến
một kiểu số nguyên sản lượng các bù đắp bằng byte của một thành phần trong cấu trúc. Điều này là không được phép một cách rõ ràng hoặc bị cấm bởi các tiêu chuẩn, nhưng nó thường làm việc.
Ví dụ
«định nghĩa các OFFSET (loại, lĩnh vực)
((size_t) & ((loại *) 0) -> trường)
đang được dịch, vui lòng đợi..
![](//viimg.ilovetranslation.com/pic/loading_3.gif?v=b9814dd30c1d7c59_8619)