C语言 内存中的Int地址增加4


#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将是2float将是4char将是1,但我得到了以下内容:

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

对于floatchar我认为这是正确的,但对于int我不知道为什么它给出了

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

然而,你的假设不正确。该标准没有要求int的尺寸必须为2或任何特定的尺寸。

你的程序显示int的大小是4在你的系统/环境。

教训:
永远不要依赖或假设一个类型的大小,总是使用sizeof来确定大小,这就是标准提供sizeof的原因。

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

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

int数据类型通常为4字节。shortshort int数据类型为2字节;

整数类型的实际大小因实现而异。唯一的保证是long不小于long, long不小于int, int不小于short。

sizeof (short int) <= sizeof (int) <= sizeof (long int)


但是你可以确定它的大小至少是16位


这将是有用的,关于基本c++类型大小的详细信息。

最新更新