Các hằng ký tự trong C (đối diện với C ++) có kiểu int
. Vì vậy, cuộc gọi này
printf("%d",sizeof('A'));
đầu ra 4. Đó sizeof( 'A' )
là bằng sizeof( int )
.
Từ tiêu chuẩn C (hằng số ký tự 6.4.4.4)
10 Hằng số ký tự nguyên có kiểu int ....
Mặt khác (6.5.3.4 Toán tử sizeof và alignof)
4 Khi sizeof được áp dụng cho toán hạng có kiểu char, char không dấu hoặc char đã ký, (hoặc phiên bản quali của nó), kết quả là 1.
Vì vậy toán hạng của sizeof
toán tử trong biểu thức sizeof( 'A' )
này có kiểu int trong khi trong biểu thức này sizeof( a )
có a được khai báo như
char a = 'A';
toán hạng có kiểu char
.
Hãy chú ý đến những cuộc gọi như thế này
printf("%d",sizeof(6.5));
sử dụng công cụ xác định định dạng chuyển đổi không chính xác. Bạn phải viết
printf("%zu",sizeof(6.5));
Ngoài ra trong cuộc gọi trên, có một hằng số loại double
trong khi trong cuộc gọi này
printf("%zu",sizeof(c));
biến c
có loại float
.
Bạn có thể nhận được kết quả tương tự cho các cuộc gọi này nếu cuộc gọi đầu tiên sử dụng hằng số kiểu float như
printf("%zu",sizeof(6.5f));
6.5
không phải là một cái phao, đó là mộtdouble