• 函数返回值C语言中malloc函数返回值是否需要类型强制转换问题


    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

        经常看到有人说C言语中malloc函数的返回值不要用强制类型转换. 近来看到了这个帖子http://stackoverflow.com/questions/7545365/why-does-this-code-segfault-on-64-bit-architecture-but-work-fine-on-32-bit, 终于是懂原因了. 做个结总如下: 

        

        1. 在C言语中, 如果调用的函数没有函数型原, 则其返回值将默以为 int 型.

        虑考调用malloc函数时忘记了 #include <stdlib.h>的况情

        此时malloc函数返回值将为 int 而不是void * (这是C言语的规矩, 有所没有函数型原的函数返回值都为int), 此时如果在程序中有如下语句

    int *p =  malloc(10);

        则译编器会给出正告, ``assignment of pointer from integer lacks a cast'' ( 该应是较早本版的译编器, 最新的译编器如gcc中, 如果函数型原没有显式的给出, 则会给出正告"warning: implicit declaration of function ‘malloc’", 所以其实只要忘了 #include <stdlib.h> 译编器就会给正告了), 如果此时是如下语句

        每日一道理
    “一年之计在于春”,十几岁的年纪,正是人生的春天,别辜负了岁月老人的厚爱与恩赐。行动起来,播种梦想吧!

        

    int *p = (int *) malloc (10);

        则会将 malloc 的返回值 int 强制转换为向指int类型的指针, 此时译编器不给出``assignment of pointer from integer lacks a cast'' 的正告(实际上在现的译编器会因为malloc函数没有声明函数型原而给出正告), 但这样的转换有可能会带来问题.

        

        2. 在C++中, 如果不对malloc函数的返回值行进表现的强制类型转换, 则译编会错出.

        上面的语句

    int *p =  malloc(10);

        在.c件文中以C言语语法译编不会报错, 够能通过, 但如果改成.cpp件文以C++语法译编则会报错 " error: invalid conversion from ‘void*’ to ‘int*’ ", 由此可以看出C++的语法检查更严厉一点. 不过在C++中更该应用new来分配内存, 而不是malloc.

        

        

        所以最好的方法该应是在C言语中malloc函数用不强制类型转换, 但如果程序虑考到C++的兼容性的话, 那该应应用强制类型转换, 而在C++程序中该应用new来替代malloc分配内存.

        

        参考: 

        http://stackoverflow.com/questions/7545365/why-does-this-code-segfault-on-64-bit-architecture-but-work-fine-on-32-bit

        http://c-faq.com/malloc/mallocnocast.html

    文章结束给大家分享下程序员的一些笑话语录: 自行车
    一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
    骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
    另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。

  • 相关阅读:
    jms版本
    2-9 Mybatis-Plus之CRUD演示二
    2-8 Mybatis-Plus之CRUD演示一
    2-7 Mybatis-Plus代码生成器演示
    2-6 Mybatis-Plus配置和代码生成器解析
    2-5 Mybatis-Plus配置文件详解
    2-4 Mybatis-Plus框架介绍
    2-3 项目基础环境构建
    2-2 项目结构介绍和框架选择
    2-1 章节及基础环境介绍
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3069665.html
Copyright © 2020-2023  润新知