结构体指针 sizeof问题

#include<bits/stdc++.h>
using namespace std;
 
typedef struct _id{
    int a;
}id,*idd;

int main() {
    id* x,*y,*z,*k;
    x = (idd)malloc(sizeof(struct _id));
    y = (idd)malloc(sizeof(_id));
    z = (idd)malloc(sizeof(id));
    k = (idd)malloc(sizeof(idd*));
    cout<<sizeof(x)<<sizeof(y)<<sizeof(z)<<sizeof(k); 
}

请问大家sizeof后面写的这四个参数是一个意思吗
id是一个结构体 idd是结构体指针 _id是一个标识符
后面写这四个都是可以的嘛 为什么最后结果都是8呀

注意几个知识点:
1:sizeof求得是啥,他的参数怎么传递
2:关于结构体的定义,以及结构体的表示方法,struct是可以省略的,以及结构体指针和一个对象的表示方法
3:要知道指针的概念,指针和地址的关系,而计算机对指针,也就是存地址的变量,都是4字节大小

img

因为你是64位计算机,sizeof计算任何指针的大小都是int的大小,所以都是8,与指针是哪种类型没有关系

在这个程序里,idd是一个结构体指针类型的别名。在对x,y,z,k赋值的代码都有一个(idd),指将数据类型强制转换为idd类型,即指针类型。指针类型在32位机上占4个字节,64位机占8个字节。所以在64位机上sizeof(x),sizeof(y),sizeof(z),sizeof(k)都是8