C语言中三种动态内存分配写法的区别与比较
T = (Bitree)malloc(sizeof(Binode));、T = (*Bitree)malloc(sizeof(Binode)); 和 T = (Binode)malloc(sizeof(*Binode)); 这三种写法在语义上是相同的,都是用 malloc 函数动态分配内存,并将返回的指针转换为相应的类型。
-
T = (Bitree)malloc(sizeof(Binode));:将malloc函数返回的void*指针强制转换为Bitree类型的指针。Bitree是一个指向二叉树节点的指针类型,Binode是二叉树节点的结构体类型。这种写法是常用的动态内存分配方式,简单易懂。 -
T = (*Bitree)malloc(sizeof(Binode));:这种写法使用了一个额外的解引用运算符*。由于malloc函数返回的是一个void*指针,而*Bitree也是一个指针类型,因此这种写法可以正确地将malloc返回的指针转换为Bitree类型。但是,这种写法比较复杂,而且容易让人误解,因此建议不要使用。 -
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)); 写法比较复杂,容易让人误解,建议不要使用。
原文地址: https://www.cveoy.top/t/topic/6hS 著作权归作者所有。请勿转载和采集!