2011-12-19 66 views
0
#include<stdio.h> 

int main() 
{ 
     int x = 1,*t; 
     float y = 1.50,*u; 
     char k = 'c',*v; 

     t = &x; 
     u = &y; 
     v = &k; 

     printf("%p %p %p", t, u, v); 

     t++; 
     u++; 
     v++; 

     printf(" %p %p %p", t, u, v); 

     return 0; 
} 

嗨增加我有此代碼,但這裏不同尋常的事情,我打印的地址,當我在INT增加所有的地址,然後從我的觀點增量會,浮子將和將但我得到以下:詮釋地址由4

0xbffa6ef8 0xbffa6ef0 0xbffa6eff 0xbffa6efc 0xbffa6ef4 0xbffa6f00 

對於浮動焦炭我認爲它正確的,但對於INT我不知道爲什麼它給這樣

+0

爲什麼你認爲'int'應該只有2個字節?你已經證明它是4(這是完全正常的 - 在大多數平臺上'int'是32位)。另一方面,'short'很可能是2個字節寬...... – Mac 2011-12-19 04:01:18

回答

2

您在系統/環境中假設sizeof(int)2

但是,您的假設是不正確的。該標準不要求int的尺寸爲2或任何特定的。

由於您的程序在您的系統/環境中顯示的尺寸爲int4

的教訓:
千萬不要相信或承擔上的類型的大小,總是使用sizeof大小來確定的,那就是標準規定sizeof的原因。

1

t內存地址增量由sizeof(int)給出。

如果sizeof(int)與你期望的t不同,那麼你的假設是錯誤的。

1

一個int數據類型通常是4個字節。一個short或一個short int數據類型是2個字節;

1

整數類型的實際大小因實現而異。唯一的保證是long long不小於long,不小於int,不小於short。

的sizeof(短整型)< =的sizeof(int)的< =的sizeof(長整型)


但你可以肯定的是它將至少16位大小。


這將是有幫助的,detailed informations regarding the size of basic C++ types.