是否应该即使在类型转换之后也需要每次都取消引用空指针?

时间:2018-07-13 20:37:02

标签: c

即使在malloc声明中将类型转换为整数类型之后,每次我取消引用指针时,都必须在没有显式类型转换的情况下使用ptr。有人能解释为什么我打字后指针不会永远转换成int *。

void *ptr;
ptr = (int*)malloc(sizeof(int));
*ptr = 1; // This line does not work even after typecasting in the above line
*(int*)ptr = 1; //This line works 

1 个答案:

答案 0 :(得分:1)

问题是第一行中的ptr声明。您似乎希望它成为

int *ptr; /* NOT void* */

否则,您每次都必须投射它。 C / C ++使用编译时声明,并且malloc上的强制转换在它所在的行之后无效。特别是

ptr = (int*)malloc(sizeof(int)); /* the (int*) HAS NO EFFECT when ptr is declared void* */