Do C chuẩn integral promotion rules, kiểu của biểu thức c + i
là int
, vì vậy đó là lý do tại sao bạn đang nhận được tương đương với sizeof (int)
.
Lưu ý rằng sizeof
không phải là hàm, chỉ cần đặt dấu ngoặc đơn khi đặt tên cho loại and to resolve precendence conflicts. coule mã của bạn được viết:
printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));
Việc sử dụng cuối cùng của sizeof
có ngoặc kể từ sizeof
liên kết chặt chẽ hơn +
, nói sizeof c + i
sẽ được phân tích như (sizeof c) + i
mà không phải là kết quả mong muốn.
Cũng lưu ý rằng đây là một cấu trúc biên dịch hầu hết thời gian, biểu thức không bao giờ thực sự được đánh giá. Tất cả những gì xảy ra là trình biên dịch "giả vờ" để đánh giá nó, để tìm ra loại biểu thức, và sau đó cung cấp cho bạn kích thước của một giá trị của loại đó. Giá trị thực tế không bao giờ cần phải tồn tại, đôi khi gọn gàng.
Loại giá trị trả về sizeof
là size_t
, được in bằng %zu
(không phải là int
).
'sizeof 'là một cấu trúc thời gian biên dịch. –
kích thước của kết quả được tính là int – BLUEPIXY
Bạn chưa đề cập đến kích thước đó (c + c) cũng sẽ cho 4, vì vậy sizeof (c/2) hoặc sizeof (1998) – Kartikya