内存中的Int地址增加4

时间:2011-12-19 03:57:47

标签: c pointers

#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 ,我不知道它为什么这么做

4 个答案:

答案 0 :(得分:2)

您假设系统/环境中sizeof(int)2

但是,您的假设不正确。该标准不要求int的大小为2或任何特定的大小。

由于您的计划在您的系统/环境中显示int的大小为4

要学习的课程:
不要依赖或假设某种类型的尺寸,始终使用sizeof来确定尺寸,这就是标准提供sizeof的原因。

答案 1 :(得分:1)

t的内存地址增量由sizeof(int)给出。

如果sizeof(int)与您预期的增加不同,那么您的假设是错误的。

答案 2 :(得分:1)

int数据类型通常为4个字节。 shortshort 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.