2013-04-12 29 views
9

Tôi đã viết một tuyên bố printf nhỏ mà đang làm việc khác nhau trong C và C++:Liệu các hoạt động của nhà điều hành sizeof khác nhau trong c andd C++

int i; 
    printf ("%d %d %d %d %d \n", sizeof(i), sizeof('A'), sizeof(sizeof('A')), sizeof(float), sizeof(3.14)); 

Các đầu ra cho các chương trình nêu trên trong c sử dụng trình biên dịch gcc là 4 4 8 4 8

các đầu ra cho các chương trình nêu trên trong C++ sử dụng g ++ biên dịch là 4 1 8 4 8

tôi mong đợi 4 1 4 4 8 trong c. Nhưng kết quả không phải như vậy.

Tham số thứ ba trong sizeof printf (sizeof ('A')) được đưa ra 8

bất cứ ai có thể cho tôi lý do cho điều này

+0

vs2012: '' 4 1 4 4 8''. – gongzhitaao

Trả lời

14

Không có gì liên quan đến nhà điều hành sizeof nói riêng; thay vào đó, kích thước của các ký tự chữ trong C khác với C++, vì các ký tự chữ cái trong C là loại int, trong khi trong C++ chúng thuộc loại char.

Xem Why are C character literals ints instead of chars? để biết thêm thông tin.

+0

Cảm ơn bạn đã trả lời. Tại sao sizeof (3.14) mất 8 byte. 3,14 là nổi bên phải. –

+5

Không, nó là gấp đôi. 3,14f là một phao. – Throwback1986

2

Như đã giải thích trong Size of character ('a') in C/C++:

Trong C, char là một byte, nhưng 'a' là hằng số int do đó, đó là (trong trường hợp của bạn, tùy thuộc vào kiến ​​trúc mà bạn biên dịch!) Rộng bốn byte. trong C++, cả hai char'a'char với kích thước một byte.

Thông điệp quan trọng nhất là C++ không phải là siêu của C. Nó có rất nhiều thay đổi nhỏ như thế này.

+2

'int' không phải là bốn byte. – chris

+0

@chris Đã thêm ghi chú – Patashu

+0

Cảm ơn Bạn đã hỏi câu hỏi dựa trên trích dẫn cuối cùng được bạn đề cập. C++ là superset của C –

3

Có, đó là triển khai cụ thể. sizeof() trả về size_t là số nguyên không dấu. Kích thước của nó phụ thuộc vào máy (32-bit so với 64-bit) và cũng có thể thực hiện.

Các vấn đề liên quan