首页 > 编程知识 正文

c语言中malloc函数的头文件,malloc返回值类型

时间:2023-05-06 15:57:55 阅读:145270 作者:4536

本文概述了旧文章的内容,并总结了malloc返回值的三种变革方式,较全面地总结了各自的应用范围。

1 .原文内容向malloc的三种变革方式

3 .各自的应用范围

以前有篇文章叫《C/C++ 误区 —— 强制转换 malloc() 的返回值》。

文章的大致内容如下

1. malloc函数位于或头文件中,而不是。

2.c语言最初没有void型,所以使用char*表示通用指针。

/* theolddeclarationofmalloc */char * malloc (size ); char*p=malloc(size*sizeof ) p ); /*是的,不需要转型。 */T1*P1=malloc(size1*sizeof ) P1 ) ); /*(T1!=char )不能。 char*无法隐式转换为T1**/T2*P2=(T2* ) malloc (size2* sizeof (p2 ) )。 /*(T2!=char )是,类型转换() /

3 .由于在c语言中引入了void类型,规定了void*可以用来表示通用指针,并且void*可以隐式地转换为任意指针类型。

/* thenewdeclarationofmalloc */void * malloc (size ); char*p=malloc(size*sizeof ) p ); /*也可以。 void*可以隐式转换为任何指针类型*/t1*p1=malloc(size1*sizeof ) p1 )。 /*现在,void*可以隐式转换为任何指针类型*/t2*p2=(t1* ) malloc (size2* sizeof (p2 ) )。 /*还可以,但是已经*/

在引入void后的c语言中,使用强制转换既是画蛇添足,也影响代码维护。

然后他说这是丙/丙的误区。

原文概述结束,开始说这篇文章的内容:

malloc返回值的转换大致分为以下三种方法。

1 .仅限c

/* legalonlyinC*/

/*新建头文件*/t*p=malloc(size*sizeof ) p ); //T!=void */

/*旧头文件*

t*p=(t* ) malloc ) size*sizeof ); //T!=void */

2 .仅限c

c支持void,但不允许void*隐式转换为任意类型的指针,需要static_cast。

//legalonlyinC //新头文件t * p=static _ cast (malloc (size * sizeof ) p ) )//旧头文件(现在有此编译器吗? (t*p=reinterpret_cast(malloc ) size*sizeof ) ); //当然在c中T*p=newT[size]; //或STD :3360向量(大小); //但这不是文章讨论的重点

3 .在丙/丙

/* legalinbothcandc *//* legalinbothnewandoldheader */t * p=(t * ) malloc (尺寸*尺寸) p );

第一种转换为新头文件的方式,如代码第1行所述,仅在c编译器中合法。

因为c不支持从void*到其他指针类型的隐式转换。

所以,原文章说这是C/C的误区,不准确。

这只是(引入void类型后) c语言中的“非必需”动作,是否存在误解值得考虑。

第二种转换为新旧头文件的方式,如代码第1行所述,仅在c编译器中合法。

因为c编译器不知道static_cast或reinterpret_cast。

第三,中庸的写法。

正如代码第1行所述,此代码无论是c编译器、c编译器、新头文件还是旧头文件,都是合法代码。 是移植性最高的代码。

因为支持代码中使用的(c样式)模型转换,malloc——C/C。

所以,这种写法并不一定画错别字或蛇足。

因为代码的作者可能比原始文章的作者对可移植性(c和c新旧编译器)有更多的看法。

posted on 2009-03-0610336016 own waterloo阅读(3683 )评论)4)编辑收藏参考

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。