2013-07-19 32 views
7

Với đoạn mã này:điều hành sizeof trả về 4 for (char + ngắn)

#include <stdio.h> 

    int main() { 

     short i = 20; 
     char c = 97; 

     printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i)); 

     return 0; 
    } 

Tại sao sizeof(c + i) == 4?

+9

Quảng bá nguyên mẫu? – nouney

+4

(c + i) được thêm trước và sizeof được tính cho kết quả .. và kết quả là số nguyên .. do đó kích thước là 4 .. –

+4

Nitpick: 'sizeof' không phải là hàm, nó là toán tử. – milleniumbug

Trả lời

17

c + i là một biểu thức số nguyên (integer khuyến mãi!), Do đó lợi nhuận sizeof()sizeof(int)

3

C sử dụng int cho tất cả các tính toán số nguyên, nếu không có quy định khác. Trên nền tảng của bạn, int dài 32bit rõ ràng, do đó, sizeof trả lại 4. Nếu trình biên dịch của bạn sẽ sử dụng số nguyên 64 bit, nó sẽ là 8.

+0

một chút offtopic, nhưng là có bất kỳ trình biên dịch được biết đến sử dụng ints 64bit? – keltar

+0

Tìm hiểu thêm về kiến ​​trúc thực tế - ví dụ: SPARC64 - ILP64/SILP64 –

4

Các loại số nguyên nhỏ hơn int được quảng bá khi hoạt động là được thực hiện trên chúng. Nếu tất cả các giá trị của loại ban đầu có thể là được biểu thị dưới dạng int, giá trị của loại nhỏ hơn được chuyển đổi thành một int; nếu không, nó sẽ được chuyển thành int không dấu.

Chương trình khuyến mãi nguyên bản yêu cầu quảng cáo cho mỗi biến (c và i) đến kích thước int.

short i = 20; 
char c = 97; 
//The two int values are added and the sum is truncated to fit into the char type. 
char a = c + i; 
printf("%d, %d, %d %d\n", sizeof(i), sizeof(c), sizeof(c + i),sizeof(a)); 

2, 1, 4 1 
+0

Chia sẻ chương thú vị với bạn [Chuyển đổi nhà điều hành: Chuyển đổi số học] (http://csweb.cs.wfu.edu/~torgerse/Kokua/More_SGI/007- 0701-150/sgi_html/ch05.html) –

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