malloc函数和void *
2009-07-30 16:58
197 查看
1、用malloc函数申请空间:
例如:
int len = 100;
用int *p = (int *)malloc(len * sizeof(int))
或者:
int *p = malloc(len * sizeof(int))
请问int *必须加吗? 不加也可以运行程序的, 而且有时候连warnning 都没有啊, 那个Int*是什么意思?
返回的不就是地址吗, 而P也是指针啊, 为什么我见好多地方都有强制类型转换的做法的
原型:
void *malloc(size_t size)
返回值是:已分配内存的首地址
2、那个void 和void*有哪位同学可以指点一下, 我觉得void本来就不需要返回类型, 那要那个void * 干嘛呀?
答:
C下,建议 int *p = malloc(len * sizeof(int))
C++下,建议 int *p = (int *)malloc(len * sizeof(int))
因为C++下有更严格的类型检查
C标准并不要求强制转换,在赋值时会将void *隐式转换成相应类型的指针。
对malloc的返回类型强制转换时传统C的习惯用法,因为传统C中malloc返回char *,隐式转换会产生警告
但为了保持C++兼容,还是需要返回类型强制转换的
答:
这个问题c与c++是不同的,c允许void*指针与普通指针互相赋值,但c++不允许void*指针赋予普通指针,必须经过强制转换才可以。
因此c中你可以直接int *p = malloc....,在语法上是没有问题的。但从一个良好的风格出发,使用强制转换可以利于代码日后向c++移植,否则,要进行不那么让人愉快的修改。
问题网址
例如:
int len = 100;
用int *p = (int *)malloc(len * sizeof(int))
或者:
int *p = malloc(len * sizeof(int))
请问int *必须加吗? 不加也可以运行程序的, 而且有时候连warnning 都没有啊, 那个Int*是什么意思?
返回的不就是地址吗, 而P也是指针啊, 为什么我见好多地方都有强制类型转换的做法的
原型:
void *malloc(size_t size)
返回值是:已分配内存的首地址
2、那个void 和void*有哪位同学可以指点一下, 我觉得void本来就不需要返回类型, 那要那个void * 干嘛呀?
答:
C下,建议 int *p = malloc(len * sizeof(int))
C++下,建议 int *p = (int *)malloc(len * sizeof(int))
因为C++下有更严格的类型检查
C标准并不要求强制转换,在赋值时会将void *隐式转换成相应类型的指针。
对malloc的返回类型强制转换时传统C的习惯用法,因为传统C中malloc返回char *,隐式转换会产生警告
但为了保持C++兼容,还是需要返回类型强制转换的
答:
这个问题c与c++是不同的,c允许void*指针与普通指针互相赋值,但c++不允许void*指针赋予普通指针,必须经过强制转换才可以。
因此c中你可以直接int *p = malloc....,在语法上是没有问题的。但从一个良好的风格出发,使用强制转换可以利于代码日后向c++移植,否则,要进行不那么让人愉快的修改。
问题网址
相关文章推荐
- error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
- CLR内核调试之:Malloc函数实现
- nafxcw.lib(afxmem.obj): LNK 2005 错误:"void * _cdecl 运算符 new (unsigned int)"(stdafx.obj 中已定义 2@YAPAXI@Z)
- 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
- malloc函数的原理
- [C++ Error] GdiplusGraphics.h(34): E2015 Ambiguity between 'Gdiplus::Graphics::Graphics(void *)' and 'Gdiplus::Graphics::Graphic
- void * 回调函数
- malloc函数
- malloc函数
- malloc函数
- malloc函数
- CLR内核调试之:Malloc函数实现
- c++结构体中包含类对象成员的问题 malloc函数不能调用构造函数 new可以
- malloc函数
- void * 的使用以及作用
- error C2036: “void *”: 未知的大小
- C&C++_malloc函数
- malloc函数,realloc函数与calloc函数的区别
- malloc函数的一种简单的原理性实现
- malloc函数的使用以及内存泄露情况