2010-07-26 35 views
5

Hãy xem xét các chương trìnhđiều hành sizeof() trong C

main() 
{ 
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3)); 
} 

đầu ra từ một trình biên dịch gcc là:

4 2 4 

Tại sao nó như vậy?

+6

kiểm tra sizeof (int) và sizeof (char) và sizeof (char *) – Vijay

+8

'sizeof' không phải là hàm mà là toán tử. –

+0

@benjamin nút: thứ tự khác nhau sẽ khớp với câu hỏi của OP :) – akira

Trả lời

13

Giả sử bạn đang chạy trên một hệ thống 32-bit:

sizeof một ký tự chữ '3' là 4 vì literals nhân vật được ints trong ngôn ngữ C (nhưng không phải C++).

kích thước của "3" là 2 vì nó là mảng có độ dài 2 (chữ số 3 cộng với dấu NULL).

kích thước của chữ 3 là 4 vì nó là một int.

+2

Câu trả lời cho câu hỏi này giúp giải thích thêm một số chi tiết - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int –

+1

Tại sao là '3' một số nguyên? – Mohit

+1

Trong C, char literals có kiểu int. Không phải như vậy với C++. –

0

sizeof() Output phụ thuộc vào trình biên dịch bạn đang sử dụng

12

Một vài điểm cần lưu ý:

  1. sizeof không phải là một chức năng, đó là một nhà điều hành. Nó trả về kích thước của một loại trong các đơn vị của sizeof char. Nói cách khác sizeof char luôn 1.
  2. là '3' là một int
  3. "3" là một char[2], nhân vật 3 sau đó terminator null.
  4. 3 là một int

Với những sự khác biệt có thể dễ dàng giải thích:

  1. một int đòi hỏi 4 char s khoảng trống để giữ nó
  2. char[2] tự nhiên chỉ yêu cầu 2 char s
+1

+1 để đề cập đến 'sizeof' là toán tử. Pet peeve của tôi: Niềng răng trong 'sizeof (char)' thuộc về loại (nơi chúng cần thiết). Chúng có thể (và nên) được bỏ qua trong 'sizeof '3''. – schot

3

Để báo giá K & R,

Mỗi trình biên dịch là tự do lựa chọn kích thước phù hợp cho phần cứng riêng của mình, chỉ tuân theo các hạn chế rằng quần short và ints là ít nhất 16 bit, chờ đợi ít nhất 32 bit, và ngắn không dài hơn int, không dài quá.