因为数据结构课在使用malloc函数的时候一直很迷惑,为什么一定需要在前面加上一个强制转换语句,像是这样:int *a = (int *)malloc(sizeof(int)*3);

为此我在菜鸟教程的malloc()函数介绍中找到了关于malloc的声明:void *malloc(size_t size),显然加上一个强制转换语句并不是标准语法必须的东西,但是在菜鸟教程下面的举例中是按照强制转换的写法来写的,可惜没有说为什么。为此我尝试了不加强制转换语句的malloc来直接分配空间,在gcc编译后并没有报错或者发出警告。

这就很神奇了,我换了多个姿势来对这两种用法进行测试,包括但不限于不同大小long *a = malloc(sizeof(int)*2)或者数组结构int *b = malloc(size(int)*3),他们都没有报错或警告,而强制转换亦是如此。

就在我怀疑是某种错误的如同void main这种异类写法产生了曼德拉效应时,我看到了另一篇博客的记录:在ANSI/ISO标准C下,我们是可以不使用强制转换来直接使用malloc的,并且使用强制转换还可能掩盖malloc()声明错误时产生的重要警告,反而不如直接使用malloc。但是使用malloc强制转换的好处在于,可以更方便地移植到C++中,因为C++似乎并不支持这种隐式转换。

根据这个帖子我大概猜测了一下国内这种喜欢在malloc函数前加强制转换命令的原因,除了个别学校在教学生C语言的时候把C/C++混为一谈,导致学生用C++的语法来理解C语言(这种情况真的不少),还有很大原因是因为国内高校很喜欢用Dev-C++这类常年未更新用着远古标准的IDE。

malloc的强制转换相关推荐

  1. MFC中强制转换总结

    由于类型转换经常出问题这里收集了一些常见的问题,下面是强制类型转换的科普: C++中的类型转换分为两种: 1.隐式类型转换: 2.显式类型转换. 而对于隐式变换,就是标准的转换,在很多时候,不经意间就 ...

  2. c语言 void**类型转换,void指针类型强制转换

    如何将一个void*强制转换成行指针类型? void*指针可以转换成任何类型的指针. 强制转换即可,比如 (int *)(void *)p; 假设你的数组有N行M列的int型数据. int arr[N ...

  3. Go 学习笔记(32)— 类型系统(命名类型、未命名类型、底层类型、类型强制转换、类型别名和新声明类型)

    1. 命名类型和未命名类型 1.1 命名类型 类型可以通过标识符来表示,这种类型称为命名类型( Named Type ). Go 语言的基本类型中有 20 个预声明简单类型都是命名类型, Go 语言还 ...

  4. C++:将char*指针强制转换成一个指向结构体的指针

    在使用Socket与雷达进行通信采集数据时,会遇到"打包与解包"的问题,在打包和解包过程中,会涉及到结构体指针与字符指针间的强制转换.如下: 打包就是将包头与信息封装成一定大小的包 ...

  5. 【C++】C++ 强制转换运算符

    C++ 运算符 强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型.强制转换运算符是一元运算符,它的优先级与其他一元运算符相同. 大多数的 C++ 编译器都支持大部分通用的强制转换 ...

  6. 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

    此文章参考<深入理解计算机系统>P31. 先看如下代码:  12345的十六进制表示为:0x00003039 1 #include <stdio.h> 2 3 int main ...

  7. 隐式转换和显式转换及强制转换的区别

    string strType = "123"; object objType= (object)strType;//可以不要,隐式转换, 要的为显式转换 string strTyp ...

  8. 为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?

    直到今天,我还以为例如: i += j; 只是以下方面的捷径: i = i + j; 但是,如果我们尝试这样做: int i = 5; long j = 8; 那么i = i + j; 不会编译,但是 ...

  9. php中int()强制转换,php下intval()和int强制转换使用的区别是什么

    php下intval()和int强制转换使用的区别是:1.[intval()]如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值:2.转换为int的PHP字符串,在使用之前 ...

最新文章

  1. linux redis 启动警告解决方法
  2. 职业规划要结合用人单位需求。
  3. apache的斜杠问题
  4. tensorflow系列之1:加载数据
  5. (九)模型驱动和属性驱动
  6. 人生的意义,呵!我找到了
  7. SpringBoot之获取配置文件中的数据
  8. 一个x86平台的spi flash驱动移植笔记
  9. 前端界面根据条件动态显示图片
  10. 三极晶体管放大电路实验
  11. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
  12. VMware Workstation 備份與恢復虛擬機
  13. 基于MTCNN+arcface的人脸检测和人脸识别
  14. 2021年Java常见面试题,实战篇
  15. 5年以上旧电脑如何升级
  16. linux 6.5 安装vnc,Linux_CentOS6.5安装vncserver实现图形化访问
  17. 打卡定制版 最新H5早起打卡网抑云熬夜打卡+有支付/带教程
  18. 流星群侠传服务器维护中是什么意思,流星群侠传一直进不去 无法进入游戏解决方法...
  19. pe下查看ip和计算机名称,通过IP地址怎么查找win7系统计算机名称
  20. 基于支持向量机的文本分类算法研究(二) —— 支持向量核函数介绍(stitp项目)

热门文章

  1. 【每周论文】20210110-BusTr_ConSTGAT_HetETA
  2. 华为云CDN服务,满足你对加速的迫切需求!
  3. 修改recovery模式下的字体大小
  4. php重写aja返回数据方式方式
  5. 午夜凶铃,阎王爷召唤程序员老王。。
  6. Lua Userdata 的元表 (Metatable)
  7. 七上八下猜数字_六一儿童节游园活动的项目和游戏规则.doc
  8. RBtree插入跟删除图解代码
  9. 中医药治疗抑郁症——来自肠道菌群的解释
  10. 苹果icloud登录_苹果怎么把旧手机的东西导入新手机