C语言中malloc函数返回值是否需要类型强制转换问题
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函数返回值是否需要类型强制转换问题
- C语言中malloc函数返回值是否需要类型强制转换问题
- C语言中malloc函数返回值是否需要类型强制转换问题
- 函数返回值C语言中malloc函数返回值是否需要类型强制转换问题
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- Android中通过泛型解决findViewById需要强制类型转换的问题
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- C语言中强制数据类型转换的总结
- C#调用C++版本dll时的类型转换需要注意的问题小结
- 强制数据类型转换问题
- C语言中不同类型的结构体的指针间可以强制转换
- C++中四种类型转换以及const_cast是否能改变常量的问题
- 关于OpenCV中IplImage的char类型的ImageData需要进行强制类型转换为uchar的说明
- php foreach 参数强制类型转换的问题
- easyui-datagrid关于展示的字段需要进行数据类型转换的问题(自己记录备忘)
- 10_基本数据类型自动转换_强制转型_类型提升问题
- 声明一个Object对象,然后强制转换成Dog类型并判断是否转换成功。