ค่าคงที่ตัวละครใน C (ตรงข้ามกับ C ++) int
มีชนิด ดังนั้นการโทรนี้
printf("%d",sizeof('A'));
เอาท์พุท 4. นั่นคือจะมีค่าเท่ากับsizeof( 'A' )
sizeof( int )
จากมาตรฐาน C (6.4.4.4 ค่าคงที่ตัวละคร)
10 ค่าคงตัวเลขจำนวนเต็มมีประเภท int ....
ในทางกลับกัน (6.5.3.4 ขนาดและการจัดตำแหน่งของผู้ประกอบการ)
4 เมื่อ sizeof ถูกนำไปใช้กับตัวถูกดำเนินการที่มีประเภทถ่าน, ถ่านที่ไม่ได้ลงนามหรือถ่านที่ลงนามแล้ว (หรือรุ่นที่มีคุณสมบัติเหมาะสม) ผลลัพธ์คือ 1
ดังนั้นโอเปอแรนด์ของโอเปsizeof
อเรเตอร์ในนิพจน์นี้sizeof( 'A' )
จึงมีชนิด int ขณะที่อยู่ในนิพจน์นี้sizeof( a )
ที่มีการประกาศให้ทราบ
char a = 'A';
char
ถูกดำเนินการมีประเภท
ให้ความสนใจกับการโทรแบบนี้
printf("%d",sizeof(6.5));
ใช้ตัวระบุรูปแบบการแปลงที่ไม่ถูกต้อง คุณต้องเขียน
printf("%zu",sizeof(6.5));
นอกจากนี้ในสายข้างต้นมีการใช้ประเภทคงที่double
ในขณะที่อยู่ในสายนี้
printf("%zu",sizeof(c));
ตัวแปรที่มีชนิดc
float
คุณสามารถรับผลลัพธ์เดียวกันสำหรับการโทรเหล่านี้หากการโทรครั้งแรกใช้ค่าคงที่ของประเภทลอยเช่น
printf("%zu",sizeof(6.5f));
6.5
ไม่ใช่ทุ่นมันเป็นdouble