#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 将 2 < / strong>,浮动将 4 而 char 将 1 但我得到以下内容:
0xbffa6ef8 0xbffa6ef0 0xbffa6eff 0xbffa6efc 0xbffa6ef4 0xbffa6f00
对于 float 和 char ,我认为它是正确的,但对于 int ,我不知道它为什么这么做
答案 0 :(得分:2)
您假设系统/环境中sizeof(int)
为2
。
但是,您的假设不正确。该标准不要求int
的大小为2
或任何特定的大小。
由于您的计划在您的系统/环境中显示int
的大小为4
。
要学习的课程:
不要依赖或假设某种类型的尺寸,始终使用sizeof
来确定尺寸,这就是标准提供sizeof
的原因。
答案 1 :(得分:1)
t
的内存地址增量由sizeof(int)
给出。
如果sizeof(int)
与您预期的增加不同,那么您的假设是错误的。
答案 2 :(得分:1)
int
数据类型通常为4个字节。 short
或short int
数据类型为2个字节;
答案 3 :(得分:1)
整数类型的实际大小因实现而异。唯一的保证是long long不小于long,不小于int,不小于short。
或
sizeof(short int)&lt; = sizeof(int)&lt; = sizeof(long int)
但你可以肯定它至少是16位。
这会有所帮助,detailed informations regarding the size of basic C++ types.