什么时候需要显式指针类型转换?

mis*_*yes 0 c c++ pointers casting

在C中,如果我有两种类型的指针:

typeB *q;
typeA *p; 
Run Code Online (Sandbox Code Playgroud)

在下面的int中,是否没有必要进行显式转换 (typeA *)

1    p= q       is fine, no need to use p = (typeA  *)q;

2    define: void func(typeA *p){}

     call:  func(q);  is fine, no need to use func((typeA  *)q)

3    p=malloc(sizeof(typeA));   is fine, no need to use p=(typeA  *)malloc(sizeof(typeA))
Run Code Online (Sandbox Code Playgroud)

另外,C++是否相同?

谢谢!

Mik*_*our 5

我会假设它们是不相关的类型.如果它们都是相同类型的别名,则指向一个的指针可以隐式转换为指向另一个的指针.

  1. 没有; 在两种语言中,您需要使用强制转换来在不相关的指针类型之间进行转换 在C++中,如果typeA是基类,则可以typeB.

  2. 与第一个完全相同 - 两者都试图初始化typeA*a typeB*.

  3. C很好; void*可以隐式转换为任何对象指针类型.在C++中不允许这种转换; 但你通常不应该使用malloc.