我想问一下我的电脑是64位的,unsigned int*不应该是占8个字节么,输出的不应该是0x0000000000100008么,我想知道为什么这里还是4

struct test
{
    int num;
    int pcname;
    short sdate;
    char cha[2];
    short sba[4];
}* p;

//假设p的值为0x100000。如下表达式的值为多少
//一直,结构体test类型的变量大小是20个字节

int main()
{
    p = (struct test*)0x100000;
    printf("%p\n", (unsigned int*)p + 0x1);//0x0000000000100004   后面是我用vs2022编译跑出来的结果
    return 0;
}

我想问一下我的电脑是64位的,unsigned int*不应该是占8个字节么,输出的不应该是0x0000000000100008么,我想知道为什么这里还是4

64位的unsigned int占8字节??
不都是4字节吗

32位编译器:

*char/unsigned char :1字节
char :4字节
short int:2字节
int/unsigned int:4字节
long int:4字节
float:4字节
double:8字节
long long:8字节
long double:12字节

64位编译器:
char/unsigned char :1字节
char *:8字节
short int:2字节
int/unsigned int:4字节
long int:8字节
float:4字节
double:8字节
long long:8字节
long double:16字节

int 类型都是占用4个字节的,你可以运行sizeof(int)查看返回的值,就知道占用多少个字节了。