专做特价手机的网站,做网站的时候用的什么框架,猪八戒类似网站开发成本,怎么在网站上做网页在C语言程序开发中#xff0c;动态内存分配是不可避免的#xff0c;而调用 malloc()/free() 库函数实现这一过程是方便的#xff0c;事实上#xff0c;在很多C语言程序中#xff0c;malloc/free 库函数的使用相当频繁#xff0c;它俩的C语言函数原型如下#xff0c;请看…在C语言程序开发中动态内存分配是不可避免的而调用 malloc()/free() 库函数实现这一过程是方便的事实上在很多C语言程序中malloc/free 库函数的使用相当频繁它俩的C语言函数原型如下请看void *malloc(size_t size);void free(void *ptr);malloc() 函数需要类型转换吗正常情况下malloc() 函数会从堆中申请 size 字节的内存并且将这块内存的首地址返回原则上系统不会再将被 malloc() 申请的内存分配给其他代码使用除非 free() 函数将 malloc() 申请的内存释放。malloc() 函数需要类型转换吗读者应该注意到malloc() 函数的返回值是 void * 指针型的。看过我之前文章的读者应该明白在C语言中void * 指针是不能够直接用于索引数据的。void * 指针是不能够直接用于索引数据的因此在实际的C语言程序开发中程序员调用 malloc() 函数时一般都会定义其他类型的指针例如char *cp malloc(size);读者看到这里可能会产生疑问malloc() 函数的返回值类型是 void * 指针型而变量 cp 则是 char * 指针型似乎出现了类型不匹配的情况是否需要类型转换呢是否需要类型转换呢事实上的确不少C语言程序员在调用 malloc() 函数时会使用类型转换char *cp (char *)malloc(size);int *ip (int *)malloc(size * sizeof(int));...那么调用 malloc() 函数时究竟需要不需要类型转换呢不需要有程序员认为C语言经过这么多年的发展对于 malloc() 函数如今似乎不再需要类型转换了因为 void * 指针会自动的并且安全的被转换为对应类型的指针。void * 指针在很多C语言教材中被称为“万能指针”这里就是一个体现。void * 指针在很多C语言教材中被称为“万能指针”既然 void * 指针可以自动的被转换成对应的指针类型那么再写类型转换代码似乎就“多余”了反而会让整个C语言代码啰嗦臃肿损失可读性尤其是指针类型名很长的时候例如struct this_is_test *p (struct this_is_test *)malloc(size);// 不写类型转换代码struct this_is_test *p malloc(size);上面的C语言代码显然有重复部分而且这段重复的C语言代码的“类型转换功能”也是多余的要是以后需要修改结构体 this_is_test 的名字还需要修改强制类型转换部分的代码略显繁琐。与之相对的下面这行C语言代码明显简洁许多。下面这行C语言代码明显简洁许多这么看来似乎对 malloc() 函数做类型转换“百害而无一利”了有程序员甚至认为在C语言程序开发中调用 malloc() 函数使用类型转换只是因为不知道类型转换会带来的潜在不利而已。需要不过也有C语言程序员持反对意见他们认为在调用 malloc() 时使用类型转换可以让代码在 C语言和C之间可移植有些程序员以为自己在写C语言程序但是他们实际上还是会用到C的一些特性。在 C语言和C之间可移植另外调用 malloc() 函数使用类型转换还可以发现一些潜在的风险例如有的C语言程序员会在开发中弄混 type * 和 type ** 如果没有显式的类型转换这样的错误就会被编译器隐藏掉了。因此在对 malloc() 函数的返回值做数据类型转换的过程本身就是C语言程序员自检代码的过程这样更加容易在开发阶段就发现 bug。而且如果C语言程序出现了数据类型相关的错误调用 malloc() 函数做了类型转换肯定能够更加方便的定位错误。小结弄清楚在C语言程序开发中调用 malloc() 函数时做不做类型转换的各自特点后应该能够发现其实各有各的好处那究竟是否需要做类型转换就在于程序员自己的开发习惯了。点个赞再走吧欢迎在评论区一起讨论质疑。文章都是手打原创每天最浅显的介绍C语言、linux等嵌入式开发喜欢我的文章就关注一波吧可以看到最新更新和之前的文章哦。