我在用malloc为结构体指针分配内存时发现了两种写法但是我不理解为什么
例如:typedef struct node
{
int date;
struct node *next;
}node;
node * h=malloc(sizeof( * h));//这是一种写法,我不理解为什么不用在malloc前面强制转换类型,然后分配的空间是多大的,为什么是sizeof(* h),h不是还没指向吗?
node *h;
h=(node *)malloc(sizeof(node))//这种写法就可以比较容易理解。但是我想请教上面一种是为什么。
这是可行的但思想上是不一样的,h 的类型为 node* ,是一个结构体指针,他的大小也是已知的,* h 是解引用 h 这个指针变量,等价于 h 指向的结构体,虽然未指向但 malloc 只需要获取目标空间大小即可,该结构体大小同定义结构体大小一样,根据自义定类型对齐机制可计算结构体大小,date 整型大小为 4 字节,next 指针类型大小为 4 字节,如果编译器为 vs (默认对齐数为 8)则正好偏移量为 0和4得到该结构体大小为 8 字节,即可实现 malloc。
ps:扣字不易,如有帮助,还请点个采纳捏~