TL; DR câu trả lời:
sizeof result
là giống như sizeof(char)
.
sizeof(num1+ num2)
giống với sizeof (int)
tại sao?
Trong trường hợp của bạn, chúng tạo ra 1 (được đảm bảo theo tiêu chuẩn) và 4 (có thể thay đổi) tương ứng.
Điều đó nói rằng, sizeof
tạo ra một kết quả của loại size_t
, vì vậy bạn nên %zu
format specifier để in các giá trị.
Tại sao:
Thứ nhất, đối với các nhà điều hành bổ sung +
, trích dẫn C11
, chương §6.5.6
Nếu cả hai toán hạng có kiểu số học, chuyển đổi số học thông thường được thực hiện trên số chúng.
Về chuyển đổi số học thông thường, §6.3.1.8/p1
[....] Nếu không, nguyên chương trình khuyến mãi được thực hiện trên cả hai toán hạng. [...]
và sau đó từ §6.3.1.1,/p2,
Nếu một int
thể đại diện cho tất cả các giá trị của các loại gốc (như hạn chế bởi chiều rộng, cho một chút trường ), giá trị được chuyển đổi thành int
; nếu không, nó được chuyển đổi thành một số unsigned int
. Đây được gọi là các quảng cáo số nguyên .
Vì vậy, sizeof(num1+num2)
giống với sizeof(int)
.
Nguồn
2016-07-14 07:53:21
'sizeof (num1 + num2)' là sai về mặt logic. – i486
@ i486 Ý của bạn là gì? – Jin
@jwqwerty: Không sai về mặt logic một cách hợp lý, nhưng vô ích, vì bạn đang thu được kích thước của một đối tượng tạm thời chỉ tồn tại trong khoảng thời gian xác định kích thước của nó. Trong sử dụng hàng ngày, bạn sẽ tìm kiếm 'sizeof (num1) + sizeof (num2)' nếu bạn ví dụ: muốn phân bổ không gian để tuần tự hóa dữ liệu. –