2011-12-19 32 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.