T = (Bitree)malloc(sizeof(Binode));T = (*Bitree)malloc(sizeof(Binode));T = (Binode)malloc(sizeof(*Binode)); 这三种写法在语义上是相同的,都是用 malloc 函数动态分配内存,并将返回的指针转换为相应的类型。

  1. T = (Bitree)malloc(sizeof(Binode));:将 malloc 函数返回的 void* 指针强制转换为 Bitree 类型的指针。Bitree 是一个指向二叉树节点的指针类型,Binode 是二叉树节点的结构体类型。这种写法是常用的动态内存分配方式,简单易懂。

  2. T = (*Bitree)malloc(sizeof(Binode));:这种写法使用了一个额外的解引用运算符 *。由于 malloc 函数返回的是一个 void* 指针,而 *Bitree 也是一个指针类型,因此这种写法可以正确地将 malloc 返回的指针转换为 Bitree 类型。但是,这种写法比较复杂,而且容易让人误解,因此建议不要使用。

  3. T = (Binode)malloc(sizeof(*Binode));:这种写法使用了一个 sizeof 操作符,它计算了 Binode 结构体的大小。这种写法更加直观,因为它明确地指出了分配内存的大小。同时,这种写法也更加安全,因为它避免了使用 malloc 函数返回的 void* 指针进行指针运算,而 void* 指针是无法进行指针运算的。

总结

三种写法中,T = (Bitree)malloc(sizeof(Binode)); 是最常用的写法,也是最容易理解的写法。T = (Binode)malloc(sizeof(*Binode)); 是更加直观和安全的写法,建议优先使用。T = (*Bitree)malloc(sizeof(Binode)); 写法比较复杂,容易让人误解,建议不要使用。

C语言中三种动态内存分配写法的区别与比较

原文地址: https://www.cveoy.top/t/topic/6hS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录