本文共 3197 字,大约阅读时间需要 10 分钟。
1 2 3 4 5 6 | #include <stdlib.h> int main( void ) { double *p = malloc ( sizeof *p ); /* 不推荐用 sizeof( double ) */ return 0; } |
1 | double *p = malloc ( sizeof *p ); |
1 2 3 4 5 6 7 8 9 10 11 | /* the old declaration of malloc */ char * malloc ( size_t size); char * p = malloc ( size * sizeof (*p) ); /* 可以,不需要转型 */ T1* p1 = malloc (size1 * sizeof (*p1) ); /* (T1!=char) 不可以,char*不能隐式转换成T1* */ T2* p2 = (T2*) malloc (size2 * sizeof (*p2) ); /* (T2!=char) 可以,显示类型转换 */ |
1 2 3 4 5 6 7 8 9 10 11 | /* the new declaration of malloc */ void * malloc ( size_t size); char * p = malloc ( size * sizeof (*p) ); /* 仍然可以,void* 可以隐式转换到任意指针类型 */ T1* p1 = malloc ( size1 * sizeof (*p1) ); /* 现在可以,void* 可以隐式转换到任意指针类型 */ T2* p2 = (T1*) malloc ( size2 * sizeof (*p2) ); /* 仍然可以,但不再必须 */ |
1 2 | /* 新头文件,具有 void 类型 */ T* p = malloc (size * sizeof (*p) ); /* T!=void */ |
1 2 | /* 旧头文件,不具有 void 类型 */ T* p = (T*) malloc (size* sizeof (*p) ); /* T!=void */ |
1 2 | // 新头文件 T* p = static_cast <T*>( malloc (size * sizeof (*p) )); |
1 2 | // 旧头文件(目前还有这种编译器吗) T* p = reinterpret_cast <T*>( malloc (size * sizeof (*p) )); |
1 2 3 4 5 | // 当然在 C++ 中应该考虑 T* p = new T[size]; // 或者 std::vector<T> p(size); // 但这不是文章讨论重点 |
1 2 3 | /* legal in both C and C++ */ /* legal in both new and old header */ T* p = (T*) malloc (size * sizeof (*p) ); |
转载地址:http://jykvl.baihongyu.com/