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

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

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

[cpp]

int *p =  malloc(10);

int *p =  malloc(10);

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

[cpp]

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

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

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

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

下面的语句

[cpp]

int *p =  malloc(10);

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分配内存.

C语言中malloc函数返回值是否需要类型强制转换问题的更多相关文章

  1. C语言中fgetc函数返回值为什么是int?

    学习C语言的,文件操作,大都会用到它. 它的函数原型: 这个函数的返回值,是返回读取的一个字节.如果读到文件末尾返回EOF.EOF其实就是一个宏#define EOF (-1)表示-1.既然返回的是一 ...

  2. C语言中malloc函数的理解

    在C语言中malloc函数主要是用在堆内存的申请上,使用malloc函数时,函数会返回一个void *类型的值,这个值就是你申请的堆内存的首地址:为什么返回的地址是一个void *类型的地址呢?首先我 ...

  3. C语言中malloc函数的使用方法

    C语言中malloc是动态内存分配函数.函数原型:void *malloc(unsigned int num_bytes);参数:num_bytes 是无符号整型,用于表示分配的字节数.返回值:如果分 ...

  4. C语言函数返回值和变量类型

    前言 最近在刷题,在写矩阵的快速幂的题时,对于返回值是数组的程序,写的十分冗杂.借此机会,重新梳理下C语言中函数的返回值与变量类型的关系. 按照变量的寿命,可以分为三种类型 1.静态变量 寿命从程序开 ...

  5. C语言中 malloc函数用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  6. C语言中malloc函数与free函数

    - malloc函数 全称是memory allocation,中文叫动态内存分配,用于申请一块连续的.指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑 ...

  7. c语言中malloc函数的使用

    传送门:https://www.cnblogs.com/shiweihappy/p/4246372.html c语言中内存的管理:https://www.cnblogs.com/tuhooo/p/72 ...

  8. 转 Perl函数返回值用法指导

    http://developer.51cto.com/art/201007/213003.htm Perl函数返回值用法指导   Perl编程语言中Perl函数返回值用法你是否比较熟悉,这里向大家简单 ...

  9. C语言中malloc()和calloc()c函数用法

    C语言中malloc()和calloc()c函数用法   函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: ...

随机推荐

  1. Java生成数独函数

    突然想写一下生成算法.代码注释的比较多,应该比较好理解 使用了递归 import java.util.ArrayList; public class Sudoku { static int sudok ...

  2. 网络流Dinic模板

    #include <iostream> #include <cstdio> #include <cstring> #include <queue> #d ...

  3. Watchdogs利用Redis实施大规模挖矿,常见数据库蠕虫如何破?

    背景 2月20日17时许,阿里云安全监测到一起大规模挖矿事件,判断为Watchdogs蠕虫导致,并在第一时间进行了应急处置. 该蠕虫短时间内即造成大量Linux主机沦陷,一方面是利用Redis未授权访 ...

  4. 自学Aruba1.3-WLAN厂家魔力象限

    点击返回:自学Aruba之路 自学Aruba1.3-WLAN厂家魔力象限 以下为2017<有线和无线局域网接入基础设施的魔力象限>报告:      Aruba.cisco为无线领域领导者. ...

  5. 自学Zabbix12.3 Zabbix命令-zabbix_agentd

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix12.3 Zabbix命令-zabbix_agentd 1. zabbix_age ...

  6. 变量[^_^][T_T]

    变量[^_^][T_T]source .bashrcget_ps1(){if [ "$?" = "0" ]then#we're on the system co ...

  7. json序列化 & 反序列化

    json序列化: json的dumps方法可以将json格式数据序列为python的相关数据类型,比如str,常用于打印,另外,在序列化时,中文汉字被转换为unicode编码,在dumps函数中添加参 ...

  8. bzoj1597/luogu2900 土地购买 (斜率优化dp)

    首先按x从小到大排序,那么可得: f[i]=min{f[j]+x[i]*maxy[j+1..i]} 然而这样是$O(n^2)$的而且无法做优化. 然后我们考虑:如果对于某一点,存在另一点的x和y都比它 ...

  9. A1020. Tree Traversals

    Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...

  10. 【洛谷P4180】严格次小生成树

    题目大意:给定一个 N 个顶点,M 条边的带权无向图,求该无向图的一个严格次小生成树. 引理:有至少一个严格次小生成树,和最小生成树之间只有一条边的差异. 题解: 通过引理可以想到一个暴力,即:先求出 ...