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?

rogp10 viết 10:50 ngày 01/10/2018

Chắc là (int[]) chứ int là error ngay

Có hai trường hợp: với struct và với mảng.

nghia viết 10:38 ngày 01/10/2018

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!

*grab popcorn* viết 10:46 ngày 01/10/2018

(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};

int var1[] = {1,2,3};
int *i = var1;
rogp10 viết 10:44 ngày 01/10/2018
Ideone.com

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:

The initializer for a scalar shall be a single expression, optionally enclosed in braces.

Đ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

nghia viết 10:44 ngày 01/10/2018

em cảm ơn anh chứ đọc sách nó nói mù luôn!

Bài liên quan
0