01/10/2018, 08:38
Compound literal trong c/C++ là gì?
code: int* i = (int){1, 2, 4};
em vẫn sử dụng các phần tử trong *i. Nhưng em không hiểu nó có ý nghĩa gì. Bác nào có thể giúp mình đc không?
Bài liên quan
Chắc là
(int[])
chứ int là error ngayCó hai trường hợp: với struct và với mảng.
Em viết thiếu! nhưng nó có ý nghĩa gì anh! giả sử em viết int i = (int){1, 2, 3}
khi xuất x thì luôn là 1 vậy mấy con số khác lấy làm sau!
(int) -> ép kiểu
{1, 2, 3} -> khởi tạo mảng / struct
(int){1,2,3} -> khởi tạo 1 struct / mảng ko tên rồi gán từng field của nó nó vào “struct” int.
Nhưng vì int chỉ chứa đc 1 giá trị lên lấy cái đầu (ko chắc phần này, có thể lấy cuối??)
Lệnh trên tương đương:
int var1 = {1,2,3};
Ở C thì tất nhiên compiler sẽ khá dễ dãi nên warning vài câu rồi cho chạy, tuy nhiên nếu ở C++ sẽ thành error ngay.
Tương tự cho int* i = (int[]){1, 2, 4};
Ideone.com
Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.
Chuẩn C có câu:
Điều này có nghĩa là 1, 2, 4 thực chất là một biểu thức với comma operator. Vậy ra 1 đúng rồi
em cảm ơn anh chứ đọc sách nó nói mù luôn!